Git中8個(gè)高效命令總結(jié)

Git中有很多非常實(shí)用且高效的命令,它使得我們可以非??旖莘奖愕膶?shí)現(xiàn)代碼的版本管理控制。本文總結(jié)了Git使用中的8個(gè)常用的高效命令,掌握了它們,可以很好的提高我們使用Git的工作效率。

?git commit --amend

git commit --amend命令用于給先前commit的添加新的代碼。也就是說(shuō)當(dāng)我們使用git commit --amend命令提交代碼時(shí),本地倉(cāng)庫(kù)中并不會(huì)產(chǎn)生一個(gè)新的commit,而是將本次提交的代碼提交到先前的commit中去,且提交時(shí)可以更新先前的commit的提交信息。這樣做的好處在于,減少了不必要的commit節(jié)點(diǎn),從而也就降低了工作樹(shù)的復(fù)雜度。畢竟commit節(jié)點(diǎn)少一些,工作樹(shù)更加整潔清晰,我們更容易控制代碼的版本。需要注意的是,并非所有的代碼的更改都應(yīng)添加到先前的commit中去,應(yīng)是情況而定,只有與先前的commit的用途一致的代碼才應(yīng)提交到先前的commit中去。

git commit -am "message"

git commit -am "message"命令用于將工作區(qū)中的代碼直接提交到本地倉(cāng)庫(kù),而無(wú)需手動(dòng)添加到index區(qū)。一般的流程是,當(dāng)我們修改了代碼后,首先應(yīng)該運(yùn)行g(shù)it add <files>命令將代碼從工作區(qū)放入index區(qū),然后運(yùn)行g(shù)it commit命令將其提交到本地倉(cāng)庫(kù)中。git commit -am "message"實(shí)現(xiàn)了將這兩條命令合并在一起的操作,更加快捷高效。簡(jiǎn)而言之,git commit -am "message" = git add . + git commit -m "message".

?git checkout -b <branch name>

git checkout -b <branch name>命令用于創(chuàng)建一個(gè)新的分支并將代碼庫(kù)切換到這個(gè)新的分支上去。 為了顯示這種功能,一種常見(jiàn)的做法是,首先利用git branch <branch name>創(chuàng)建一個(gè)新的branch,然后運(yùn)行命令git checkout <branch name>將代碼庫(kù)切換到剛才新創(chuàng)建的分支上去。很顯然git checkout -b <branch name>命令比它更簡(jiǎn)單高效。一句話,git checkout -b ?= git branch <branch name> + git checkout <branch name>.

?git fetch / git merge

git fetch / git merge這組命令并不見(jiàn)的是真正的高效命令,之所以放在這里是因?yàn)檫@組命令更安全實(shí)用。它與git pull這條命令的作用相同,看起來(lái)git pull僅僅用一條命令就能搞定的事情,git fetch / git merge需要兩條命令才能實(shí)現(xiàn),貌似git pull更高效。其實(shí)不然,git pull雖然僅僅用一條命令就可以從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼,但它更容出錯(cuò),也不利于我們拉取代碼的時(shí)候查看代碼的改動(dòng)部分;而git fetch / git merge這組命令可以使得開(kāi)發(fā)者在利用git fetch拉取代碼后,且在merge代碼前可以有機(jī)會(huì)查看代碼的改動(dòng),進(jìn)而決定需不需要merge到當(dāng)前分支中來(lái),因此使用git fetch / git merge可以說(shuō)是事半功倍。

git cherry-pick <commit ID>

git cherry-pick <commit ID>這條命令非常有意思,它使我們可以在工作樹(shù)上隨意摘取一個(gè)或者一組commit到當(dāng)前的分支。這些commit可以是不同的branch上的。這條命令的好處在于,當(dāng)我們?cè)谝粋€(gè)分支上面進(jìn)行了代碼修改并提交后,有其他的分支也同樣需要這些代碼的時(shí)候,可以通過(guò)git cherry-pick <commit ID>命令將想要的commit摘取到當(dāng)前的分支上,并自動(dòng)提交到本地倉(cāng)庫(kù)。它常常用于這樣的一種場(chǎng)景:我們新創(chuàng)建了一個(gè)分支用于新的版本1.0的release,同時(shí)我們也維護(hù)著master分支的代。當(dāng)我們?cè)趍aster上面發(fā)現(xiàn)了bug并將其修復(fù)后,我們同樣也需要在1.0的分支上將這些修改拿過(guò)來(lái),此時(shí)git cherry-pick <commit ID>就可以派上用場(chǎng)了,它將這些修改的commit從master分支上摘取過(guò)來(lái),并自動(dòng)提交到當(dāng)前的分支。

git stash / git stash apply stash@{index}

git stash / git stash apply stash@{index}這組命令可以使我們暫時(shí)保存當(dāng)前的修改,并在之后的某個(gè)時(shí)間將代碼恢復(fù)。它的用途非常廣泛,而且對(duì)于提高我們的工作效率非常有幫助。它常常用于這樣一種場(chǎng)景,當(dāng)我們?cè)谝粋€(gè)分支上工作時(shí)修改了很多代碼,但是任務(wù)還沒(méi)完成,還沒(méi)有到能夠提交代碼的程度,這時(shí)測(cè)試人員發(fā)現(xiàn)了一個(gè)非常嚴(yán)重的bug,需要我們緊急修復(fù),這時(shí)我們?cè)趺醋瞿??首先要做的就是先運(yùn)行g(shù)it stash命令將這些修改暫存,然后我們切換到master命令上去創(chuàng)建一個(gè)新的針對(duì)這個(gè)bug修復(fù)的分支,并在這個(gè)新的分支上工作。當(dāng)我們完成修復(fù)工作后,我們切換回到之前的分支上,通過(guò)命令git stash stash@{index}將之前暫存的改動(dòng)提取出來(lái),繼續(xù)我們的工作。

git pull --rebase / git rebase --continue

這組命令主要用于從遠(yuǎn)程代碼庫(kù)拉取代碼到本地,主要針對(duì)在一個(gè)相同分支上的代碼操作(比如master分支)。試想一下,當(dāng)我們有多個(gè)人都在同一個(gè)分區(qū)上面進(jìn)行代碼操作時(shí),這時(shí)候我們拉取代碼時(shí)會(huì)有多少?zèng)_突,場(chǎng)面會(huì)有多么混亂。如果我們使用git pull或者git fetch從遠(yuǎn)程拉取代碼,那么我們?cè)谔峤蛔约盒碌拇a時(shí)就會(huì)使得整個(gè)工作樹(shù)變得非常凌亂。git pull --rebase / git rebase --continue可以很好的解決這些問(wèn)題。首先我們將我們改動(dòng)的代碼提交到本地倉(cāng)庫(kù),然后利用git pull --rebase命令將遠(yuǎn)程倉(cāng)庫(kù)的代碼拉取到本地,它將其獲取的所有的commit放在我們新提交的commit的底部,這步完成后可能會(huì)有沖突,等我們將沖突解決完成后,再利用git rebase --continue命令將解決沖突后的代碼提交到之前提交的代碼中去。通過(guò)這兩步之后,我們整個(gè)的工作樹(shù)始終會(huì)保持在一條直線上,而不會(huì)出現(xiàn)代碼的merge分支的情況。

git rebase -i master / git rebase --continue

與多人同時(shí)工作在一個(gè)相同的分支上相比,我們一般真對(duì)每個(gè)task都會(huì)新建一個(gè)對(duì)應(yīng)的branch,每個(gè)人僅僅工作在自己的分支上,沒(méi)有人會(huì)工作在master上,當(dāng)工作完成后才會(huì)將代碼提交到master上去。這樣做的好處顯而易見(jiàn),它使得我們無(wú)須同時(shí)操作相同的分支,尤其是master的分支,從而保證了master分支的整潔與安全。那么這樣做的一個(gè)關(guān)鍵在于我們?cè)谧约旱姆种先绾闻cmaster分支保持一致性。實(shí)踐中,我們不應(yīng)在工作切底完成之后,再與master分支同步代碼,實(shí)踐證明,這樣會(huì)導(dǎo)致大量的沖突,我們應(yīng)該做的是工作的每天都應(yīng)該與master同步一次代碼,這里僅僅是從master同步新的代碼,而不應(yīng)將自己的代碼提交到master分支。git rebase -i master這條命令就是我們最好的工具。它不僅可以讓我們當(dāng)前的分支從master同步最新的代碼,而且還可以將我們分支上的多個(gè)commit合并成為一個(gè),可以讓branch更簡(jiǎn)潔,畢竟branch上的代碼都是為了實(shí)現(xiàn)一個(gè)功能。如果同步時(shí)有沖突,我們解決完沖突后,使用git rebase --continue將代碼提交到先前的commit中去。有了這兩條命令,我們?cè)诓煌种系墓ぷ骶蜁?huì)變得簡(jiǎn)單輕松。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,866評(píng)論 1 26
  • 語(yǔ)法三: (1)一樓的浴室有毛巾嗎? いっかいのとくしつにはタオルがありますか。 沒(méi)有,一樓的浴室沒(méi)有毛巾。 いい...
    淺淺清清YUJING閱讀 272評(píng)論 1 0
  • 被一個(gè)人騙了是什么感覺(jué)?其實(shí)真的很委屈很氣憤,可是又能怎么樣呢,那個(gè)人現(xiàn)在毫不在乎。居然還說(shuō):我完全不明白你...
    微若塵埃閱讀 1,727評(píng)論 0 0
  • 你可以一天上九節(jié)課兩節(jié)晚自習(xí),你可以一天寫(xiě)完兩支筆芯做至少三套卷子,你可以早起十分鐘晚睡十分鐘記幾個(gè)單詞和成語(yǔ),你...
    帥拽酷炫吊炸天閱讀 259評(píng)論 0 2
  • 網(wǎng)上越來(lái)越多的品牌活動(dòng)聚焦在孩子身上,各種網(wǎng)上競(jìng)選活動(dòng)層出不用。這里我先把我家寶寶參賽的經(jīng)歷與大家分享一下。 一次...
    小蝸牛爸爸閱讀 407評(píng)論 0 0

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