git命令行操作小結(jié)(二)

遠(yuǎn)程倉(cāng)庫(kù)

登陸GitHub,創(chuàng)建一個(gè)新的倉(cāng)庫(kù),Repository name叫做learngit,創(chuàng)建成功后,在GitHub上的這個(gè)learngit倉(cāng)庫(kù)還是空的,GitHub告訴我們,可以從這個(gè)倉(cāng)庫(kù)克隆出新的倉(cāng)庫(kù),也可以把一個(gè)已有的本地倉(cāng)庫(kù)與之關(guān)聯(lián)。然后,把本地倉(cāng)庫(kù)的內(nèi)容推送到GitHub倉(cāng)庫(kù)。

我們根據(jù)GitHub的提示,在本地的learngit倉(cāng)庫(kù)下運(yùn)行命令:

$git remote add origin git@github.com:fanfafafanfan/learngit.git

注意:fanfafafanfan是我的GitHub賬戶名

添加后,遠(yuǎn)程庫(kù)的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫(kù)。

下一步,就可以把本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上:

推送成功

把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程,用git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。

由于遠(yuǎn)程庫(kù)是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái),在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。

從現(xiàn)在起,只要本地作了提交(git add),就可以通過(guò)命令:

$git push origin master

把本地master分支的最新修改推送至GitHub

注:如果是一個(gè)新項(xiàng)目

git init?//在當(dāng)前項(xiàng)目工程下履行這個(gè)號(hào)令相當(dāng)于把當(dāng)前項(xiàng)目git化,變身!

git add .//把當(dāng)前目次下代碼參加git的跟蹤中,意思就是交給git經(jīng)管,提交到本地庫(kù)

git add <file>//把當(dāng)前文件參加的git的跟蹤中,交給git經(jīng)管,提交到本地庫(kù)

git commit -m "…"http://寫點(diǎn)提交信息

git remote add origin?git@github.com:ellocc/gittest.git?//這個(gè)相當(dāng)于指定本地庫(kù)與github上的哪個(gè)項(xiàng)目相連

git push -u origin master?//將本地庫(kù)提交到github上。

錯(cuò)誤總結(jié)

本地倉(cāng)庫(kù)初始化并添加遠(yuǎn)程倉(cāng)庫(kù)后使用:

error原因:本地倉(cāng)庫(kù)為空??

解決方法:

添加文件,并提交

其他錯(cuò)誤:

錯(cuò)誤提示:fatal: remote origin already exists.

解決辦法:$ git remote rm origin

錯(cuò)誤提示:error: failed to push some refs to ........

解決辦法:$ git pull origin master //先pull 下來(lái) 再push 上去

從遠(yuǎn)程庫(kù)克隆

$ git clone

git clone 加倉(cāng)庫(kù)地址

要克隆一個(gè)倉(cāng)庫(kù),首先必須知道倉(cāng)庫(kù)的地址,然后使用git clone命令克隆。

Git支持多種協(xié)議,包括https,但通過(guò)ssh支持的原生git協(xié)議速度最快。

創(chuàng)建與合并分支

一開始的時(shí)候,master分支是一條線,Gitmaster指向最新的提交,再用HEAD指向master,就能確定當(dāng)前分支,以及當(dāng)前分支的提交點(diǎn):

當(dāng)我們創(chuàng)建新的分支,例如dev時(shí),Git新建了一個(gè)指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當(dāng)前分支在dev上:

從現(xiàn)在開始,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后,dev指針往前移動(dòng)一步,而master指針不變:

假如我們?cè)赿ev上的工作完成了,就可以把dev合并到master上。直接把master指向dev的當(dāng)前提交,就完成了合并:

合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:

操作:

創(chuàng)建分支dev并切換到該分支
在分支里修改某文件,并提交
merge分支合并前,dev分支中修改并提交的內(nèi)容在master分支上是看不見的。
將dev分支的工作成果合并到master分支上,并刪除dev分支
刪除后,只剩下master分支了

查看分支:git branch

創(chuàng)建分支:git branch <name>

切換分支:git checkout <name>

創(chuàng)建+切換分支:git checkout -b <name>

合并某分支到當(dāng)前分支:git merge <name>

刪除分支:git branch -d <name>

用帶參數(shù)的git log可以看到分支的合并情況:

$ git log --graph --pretty=oneline --abbrev-commit

分支管理策略

普通模式合并分支
不使用 Fast forward模式合并分支

合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并,而fast forward合并就看不出來(lái)曾經(jīng)做過(guò)合并。


Bug 分支

修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除;

當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,然后去修復(fù)bug,修復(fù)后,再回到原工作分支,git stash pop,回到工作現(xiàn)場(chǎng)。


git stash list 查看工作現(xiàn)場(chǎng)存儲(chǔ)的地方

回復(fù)工作現(xiàn)場(chǎng)的兩種方法:

一是用git stash apply恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來(lái)刪除;

另一種方式是用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪了。

你可以多次stash查看工作現(xiàn)場(chǎng)存儲(chǔ)的信息,恢復(fù)的時(shí)候,先用git stash list查看,然后恢復(fù)指定的stash,用命令:

$git stash apply stash@{0}


強(qiáng)行刪除新的feature分支

開發(fā)一個(gè)新feature,最好新建一個(gè)分支;

如果要丟棄一個(gè)沒(méi)有被合并過(guò)的分支,可以通過(guò)git branch -D 強(qiáng)行刪除


查看遠(yuǎn)程庫(kù)信息,使用git remote -v

本地新建的分支如果不推送到遠(yuǎn)程,對(duì)其他人就是不可見的

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交

在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;

建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name

從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。


Tag標(biāo)簽

首先,切換到需要打標(biāo)簽的分支上:

$ git branch

* dev?

master

$ git checkout master

Switched to branch 'master'

然后,敲命令git tag 就可以打一個(gè)新標(biāo)簽:

$ git tag?

v1.0

如果想要在以前提交的commit上打標(biāo)簽,那么找到歷史提交的commit id,然后打上就好了。

$ git log --pretty=oneline --abbrev-commit

6a5819e merged bug fix 101

cc17032 fix bug 101

7825a50 merge with no-ff

6224937 add merge

...

比方說(shuō)要對(duì)add merge這次提交打標(biāo)簽,它對(duì)應(yīng)的commit id是6224937,敲入命令:

$ git tag v0.9 6224937

再用命令git tag查看標(biāo)簽:

$ git tag

v0.9

v1.0

注意,標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的??梢杂胓it show 查看標(biāo)簽信息:

$ git show v0.9

commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4

Author: *****

Date:? *****

????????add merge

...

還可以創(chuàng)建帶有說(shuō)明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說(shuō)明文字:

$ git tag -a v0.1 -m "version 0.1 released" 3628164

用命令git show <tagname>可以看到說(shuō)明文字

命令git tag <tagname> 用于新建一個(gè)標(biāo)簽,默認(rèn)為HEAD,也可以指定一個(gè)commit id;

git tag -a <tagname>? -m "blablabla..."可以指定標(biāo)簽信息;

git tag -s <tagname>? -m "blablabla..."可以用PGP簽名標(biāo)簽;

命令git tag可以查看所有標(biāo)簽。

命令git push origin <tagname>?可以推送一個(gè)本地標(biāo)簽;

命令git push origin --tags 可以推送全部未推送過(guò)的本地標(biāo)簽;

命令git tag -d <tagname>?可以刪除一個(gè)本地標(biāo)簽;

命令git push origin :refs/tags/<tagname>?可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,848評(píng)論 9 163
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,866評(píng)論 1 26
  • 對(duì)的時(shí)間遇到對(duì)的人是一種幸福,對(duì)的時(shí)間遇到錯(cuò)的人是一種悲哀,錯(cuò)的時(shí)間遇到對(duì)的人是一種悲痛,錯(cuò)的時(shí)間遇到錯(cuò)的人是一種...
    你的孤獨(dú)我為何要懂閱讀 334評(píng)論 0 0
  • 我想,我知道我怎樣,別人亦知道的是這樣的我。 別人眼中的我就是我眼中的我,我猜我的全部別人應(yīng)該都知道。 我討厭我,...
    秋千上的千千閱讀 314評(píng)論 3 2
  • 因著林徽因 人間 四月 最美 四月 在南國(guó)盡情盛開 芳菲獨(dú)秀 一抹紅,一染綠 不妖不嬈 四月 在南國(guó)放聲獨(dú)唱 熏風(fēng)...
    安歌音閱讀 436評(píng)論 0 4

友情鏈接更多精彩內(nèi)容