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