揭秘Git高手的十個(gè)秘密武器:讓你的工作效率飆升!
Git和GitHub是每個(gè)軟件工程師都必須了解的最基本的工具。它們是開發(fā)人員日常工作不可或缺的一部分,每天都要與之互動(dòng)。
精通Git不僅能簡化你的日常操作,還能顯著提高生產(chǎn)力。在這篇文章中,我們將探討一組能夠極大提升生產(chǎn)力的命令。
隨著對(duì)這些命令越來越熟練的運(yùn)用,會(huì)節(jié)省大量的時(shí)間,成為一個(gè)更高效的軟件工程師。
Git 術(shù)語
在逐一深入探討Git命令之前,我們先來熟悉一些基本的Git術(shù)語。這不僅有助于更好地理解這些命令,而且在本文后續(xù)的部分使用這些術(shù)語時(shí),也能避免混淆。
HEAD
在Git中,HEAD是一個(gè)特殊的指針/引用,始終指向當(dāng)前分支中的最新提交。當(dāng)你進(jìn)行新的提交時(shí),HEAD會(huì)向前移動(dòng),指向那個(gè)新的提交。例如,如果你處于main分支,并進(jìn)行了新的提交,HEAD現(xiàn)在將指向那個(gè)新的提交,表明它是main分支中最新的提交。
^(尖角符號(hào)):
在Git中,^符號(hào)用作導(dǎo)航穿越項(xiàng)目歷史時(shí)間線的手段。當(dāng)你使用HEAD^時(shí),它引用的是你當(dāng)前提交之前的提交。如果你在^后面追加一個(gè)數(shù)字,比如HEAD^2,它指的是當(dāng)前提交之前的第二個(gè)提交。簡而言之,^符號(hào)允許你在項(xiàng)目的歷史中向后遍歷,而數(shù)字值讓你能夠精確地確定你希望回退的提交數(shù)量。
暫存(Staging)
暫存是你組裝下一個(gè)提交中想要包含的更改的地方。暫存讓你能夠仔細(xì)策劃你的提交,使其易于審查、組織和完善你的修改。有了暫存,你可以控制哪些更改包含在你的提交中。要暫存更改,你使用git add命令,這類似于聲明“我希望這些更改成為我的下一個(gè)提交的一部分”。
現(xiàn)在,讓我們逐一探索這10個(gè)Git命令。
1、同時(shí)添加和提交文件
通常,在Git中,我們使用git add *命令來暫存所有已修改的文件以備后續(xù)提交。之后,使用git commit -m "commitMessage"命令來提交這些更改。然而,存在一個(gè)更加高效的命令可以一步完成這兩個(gè)任務(wù):
git commit -am "commitMessage"
-am標(biāo)志不僅允許我們暫存這些更改,而且還能在一個(gè)高效的操作中提交它們。
2、創(chuàng)建并切換到一個(gè)Git分支
與前面的場(chǎng)景類似,另一個(gè)命令也結(jié)合了兩個(gè)命令的功能。不是使用兩個(gè)分開的命令,一個(gè)是git branch branchName來創(chuàng)建分支,然后是git checkout branchName來切換到它。
可以使用以下命令在一個(gè)步驟中完成這兩個(gè)任務(wù):
git checkout -b branchName
-b標(biāo)志和git checkout命令一起使用,不僅允許我們創(chuàng)建一個(gè)新的分支,還能立即切換到它。
3、刪除一個(gè)Git分支
要在Git中刪除一個(gè)分支,可以使用git branch -d或者git branch -D命令。-d選項(xiàng)是安全刪除,它只會(huì)在該分支已經(jīng)完全合并到當(dāng)前分支時(shí)才刪除它。-D選項(xiàng)是強(qiáng)制刪除,無論該分支是否已經(jīng)完全合并都會(huì)刪除它。以下是命令。
安全刪除(檢查合并):
git branch -d branchName
強(qiáng)制刪除(不檢查合并):
git branch -D branchName
4、重命名一個(gè)Git分支
要重命名一個(gè)分支,可以使用git branch -m命令,后面跟著當(dāng)前分支名和新的期望分支名。例如,如果你想把一個(gè)叫做oldBranch的分支重命名為newBranch,執(zhí)行以下命令:
git branch -m oldBranch newBranch
然而,如果你想重命名現(xiàn)在正工作的當(dāng)前分支,而不顯式指定舊名稱,可以使用以下命令:
git branch -m newBranchName
這里,你不需要指定舊的分支名,因?yàn)镚it會(huì)假設(shè)你想將當(dāng)前分支重命名為新的名稱。
5、取消暫存特定文件
有時(shí),可能想要從暫存區(qū)中移除特定的文件,以便在提交前進(jìn)行額外的修改。使用:
git reset filename
這將取消該文件的暫存狀態(tài),同時(shí)保持你的更改不變。
6、丟棄對(duì)特定文件的更改
如果你想完全放棄對(duì)特定文件所作的更改,并將其恢復(fù)到最后一次提交的狀態(tài),使用:
git checkout -- filename
這個(gè)命令確保文件回到它之前的狀態(tài),撤銷任何最近的修改。它是一種在不影響其他更改的情況下重新開始編輯特定文件的有用方式。
7、更新你的最后一次 Git 提交
想象一下,你剛剛在Git倉庫中做了一個(gè)提交,但隨后你意識(shí)到你忘記在那次提交中包含一個(gè)更改,或者你可能想要修正提交信息本身。你不想為這個(gè)小改動(dòng)創(chuàng)建一個(gè)全新的提交。相反,你想要把它添加到之前的提交中。這時(shí)可以使用的命令:
git commit --amend -m 'message'
這個(gè)命令修改了你最近做的提交。它將任何已暫存的更改(你已經(jīng)用git add添加的)和你的新評(píng)論結(jié)合起來創(chuàng)建一個(gè)更新的提交。
需要記住的一點(diǎn)是,如果你已經(jīng)將提交推送到遠(yuǎn)程倉庫,你需要使用 git push --force 來強(qiáng)制推送更改以更新遠(yuǎn)程分支。因?yàn)闃?biāo)準(zhǔn)的git push操作是將一個(gè)新的提交追加到你的遠(yuǎn)程倉庫,而不是修改最后的提交。
8、暫存更改
想象你正在同時(shí)在兩個(gè)不同的分支上工作,A和B。當(dāng)你在分支A上做更改時(shí),你的團(tuán)隊(duì)要求你在分支B中修復(fù)一個(gè)bug。當(dāng)你嘗試使用git checkout B切換到分支B時(shí),Git阻止了這個(gè)操作,并顯示了一個(gè)錯(cuò)誤:
圖片
我們可以按照錯(cuò)誤消息的建議提交更改。但提交更像是一個(gè)固定的時(shí)間點(diǎn),并不是一個(gè)正在進(jìn)行中的工作。這時(shí)可以應(yīng)用錯(cuò)誤消息的第二個(gè)建議并使用暫存功能的地方。我們可以使用這個(gè)命令來暫存更改:
git stash
git stash臨時(shí)保存你還沒準(zhǔn)備好提交的更改,允許你切換分支或者在不提交未完成工作的情況下進(jìn)行其他任務(wù)。
要在我們的分支中重新應(yīng)用暫存的更改,你可以使用git stash apply或者git stash pop。這兩個(gè)命令都恢復(fù)最新暫存的更改。應(yīng)用暫存只是恢復(fù)更改,而彈出暫存則是恢復(fù)更改并將其從暫存中移除。
9、還原Git提交
想象你正在一個(gè)Git項(xiàng)目上工作,發(fā)現(xiàn)一個(gè)特定的提交引入了一些不希望的更改。你需要撤銷這些更改,但又不想從歷史記錄中擦除該提交。你可以使用以下命令來撤銷那個(gè)特定的提交:
git revert commitHash
這是一種安全且非破壞性的方式來糾正你的項(xiàng)目中的錯(cuò)誤或不想要的修改。例如,假設(shè)你有一系列的提交:
- 提交 A
- 提交 B(這里引入了不希望的更改)
- 提交 C
- 提交 D
為了逆轉(zhuǎn)提交B的影響,運(yùn)行如下命令:
git revert commitHashOfB
Git將會(huì)創(chuàng)建一個(gè)新的提交,我們稱之為提交E,它將抵消提交B引入的更改。提交E成為你分支中的最新提交,項(xiàng)目現(xiàn)在反映的狀態(tài)就像提交B從未發(fā)生過一樣。
如果你想知道如何檢索提交哈希值,使用git reflog是直接的。在下面的截圖中,高亮的部分代表你可以輕松復(fù)制的提交哈希值:
圖片
10、重置Git提交
假設(shè)你對(duì)項(xiàng)目進(jìn)行了提交。然而,在檢查后,你意識(shí)到需要調(diào)整或完全撤銷最后一次提交。對(duì)于這種情況,Git提供了這些強(qiáng)大的命令。
軟重置:
git reset --soft HEAD^
當(dāng)使用git reset --soft HEAD^時(shí),執(zhí)行一個(gè)軟重置。這個(gè)命令允許回溯到最后一次提交,同時(shí)保留所有更改在暫存區(qū)中。簡單來說,可以使用這個(gè)命令輕松地撤銷提交,同時(shí)保留你的代碼更改。當(dāng)需要修改最后的提交,也許是在再次提交之前添加更多更改時(shí),這很方便。
混合重置:
git reset --mixed HEAD^
這是當(dāng)你不指定--soft或--hard時(shí)使用git reset HEAD^的默認(rèn)行為。它撤銷了最后的提交,并從暫存區(qū)中移除了它的更改。然而,它會(huì)保留這些更改在工作目錄中。當(dāng)你想要撤銷最后的提交并從頭開始進(jìn)行更改,同時(shí)在重新提交之前保持更改在工作目錄中時(shí),這很有幫助。
硬重置:
git reset --hard HEAD^
現(xiàn)在,來看看git reset --hard HEAD^。它會(huì)徹底抹除最后的提交以及所有相關(guān)更改從你的Git歷史記錄中。當(dāng)你使用--hard標(biāo)志時(shí),就沒有回頭路了。所以在你想要永久性地丟棄最后的提交及其所有更改時(shí),一定要非常謹(jǐn)慎地使用。
小結(jié)
希望這篇文章對(duì)你有所幫助,可以學(xué)到了一些新的Git命令。