說實話 — Git 就像一把雙面刃。一方面,它是現代軟體開發的支柱。另一方面,它是一個迷宮般的命令,甚至會讓經驗豐富的開發人員也感到困惑。當然,您了解基礎知識: git clone
, git commit
和git push
是您的基本技能。但是如果我告訴您大多數開發人員從未接觸過 Git 命令,您會怎麼想?
這些隱藏的寶石可以節省您的時間,解決棘手的問題,並讓您看起來像 Git 嚮導。準備好升級了嗎?讓我們深入了解10 個被低估的 Git 指令,它們將改變您使用版本控制的方式。
git restore
:Git 的撤銷按鈕我們都經歷過這種情況——你正深陷於程式碼中,突然你意識到你弄亂了一個檔案。也許您意外地安排了某些事情,或者做出了不想保留的更改。這時git restore
就可以拯救一切了。
# Discard changes in a file
git restore <file-name>
# Unstage a file (but keep the changes)
git restore --staged <file-name>
真實範例:
有一次,我意外地暫存了一個我無意間包含的大型日誌檔。我並沒有驚慌,而是使用git restore --staged
來取消暫存它,而不會丟失其他更改。危機解除!
為什麼它很棒:對於這些任務來說,它比舊的git checkout
或git reset
更乾淨、更直觀。可以將其視為 Git 版本的 Ctrl+Z。
git switch
:更聰明的更改分支的方法如果您曾經使用過git checkout
來切換分支,那麼您就會知道它就像一把瑞士軍刀——它可以做太多事情。這就是git switch
作用所在。
# Switch to an existing branch
git switch <branch-name>
# Create and switch to a new branch
git switch -c <new-branch-name>
為什麼它很棒:它就像擁有一個專門用於分支管理的工具,而不是一個有時感覺對你不利的多用途工具。
git sparse-checkout
:更聰明地工作,而不是更努力地工作在大型 monorepo 中工作?克隆整個儲存庫就像下載網路一樣。使用git sparse-checkout
,您可以只檢出所需的檔案或目錄,從而節省磁碟空間並加快工作流程。
# Enable sparse checkout
git sparse-checkout init --cone
# Add specific directories
git sparse-checkout set <dir1> <dir2>
真實範例:
在我上一份工作中,我們有一個包含超過 10GB 資料的 monorepo。使用git sparse-checkout
,我能夠只處理前端目錄,將克隆時間從 20 分鐘縮短到 1 分鐘以內。
為什麼它很棒:它非常適合不需要整個儲存庫的大型專案。可以將其視為挑選文件而不是挑選分支。
git range-diff
:像專業人士一樣比較提交範圍曾經嘗試過比較一個分支或補丁系列的兩個版本嗎?這就像大海撈針。 git range-diff
顯示提交範圍之間的差異,使您更容易審查複雜的變更。
git range-diff <commit-range-1> <commit-range-2>
為什麼它很棒:它徹底改變了程式碼審查和重新定基工作流程。不再需要瞇著眼睛看差異來弄清楚到底發生了什麼變化。
git notes
:將元資料附加到沒有混亂的提交中有時,提交資訊並不夠。也許您需要加入內部評論、提醒或上下文,而不會使提交歷史記錄變得混亂。這就是git notes
作用所在。
# Add a note to a commit
git notes add -m "Your note here" <commit-hash>
# View notes
git log --show-notes
真實範例:
在一個團隊專案期間,我使用git notes
來加入關於為什麼做出某些決定的提醒。它幫助我們保持一致,而不會污染提交歷史。
為什麼它很棒:它就像在你的提交上留下便籤一樣 - 有用,不引人注目且易於管理。
git worktree
:同時處理多個分支來回切換分支很麻煩。如果您可以同時在多個分支上工作會怎樣?使用git worktree
,您可以為每個分支建立單獨的目錄,這樣您就不必不斷切換上下文。
# Create a new worktree for a branch
git worktree add ../new-directory <branch-name>
# List all worktrees
git worktree list
為什麼它很棒:這就像為你的程式碼提供多個工作區。不再需要處理分支 — — 只需並行工作流程。
git bisect
:像偵探一樣找出錯誤想要找出錯誤何時出現? git bisect
是您的除錯時間機器。它會透過您的提交歷史執行二進位搜尋來找到導致問題的確切提交。
# Start bisect
git bisect start
# Mark a commit as bad
git bisect bad
# Mark a commit as good
git bisect good <commit-hash>
# Reset when done
git bisect reset
真實範例:
我曾經使用git bisect
來追蹤導致我們的應用程式崩潰的一個錯誤。事實證明,這只是三個月前引入的一行程式碼。如果沒有git bisect
,我可能要花幾個小時手動檢查提交。
為什麼它很棒:它就像您的團隊中有一個偵探,幫助您以手術般的精準度追蹤錯誤。
git replace
:不破壞任何內容的情況下重寫歷史記錄需要在不進行變基的情況下修復歷史提交嗎? git replace
允許您建立一個覆蓋原始提交的替換提交,而不會更改提交哈希。
# Create a replacement commit
git replace <old-commit-hash> <new-commit-hash>
為什麼它很棒:它是一種非破壞性的方法來修復歷史上的錯誤。將其視為對您的提交的隱形編輯。
git fsck
:尋找並修復儲存庫損壞擔心儲存庫的完整性? git fsck
檢查您的儲存庫是否有錯誤並幫助您恢復遺失的物件。
git fsck --full
為什麼它很棒:它是您抵禦儲存庫損壞的第一道防線。可以將其視為 Git 版本的健康檢查。
git alias
:建立你自己的 Git 指令厭倦了輸入長命令嗎? git alias
讓您為您最喜歡的 Git 操作建立捷徑。
# Add an alias
git config --global alias.co checkout
# Use the alias
git co <branch-name>
為什麼它很棒:自訂 Git 以完美適應您的工作流程。這就像為版本控制建立自己的作弊程式碼。
git bisect
讓我們仔細看看git bisect
,它是最強大但未被充分利用的 Git 指令之一。想像一下這樣的場景:
您的應用程式崩潰了,但您不知道原因。
這個漏洞上個月還沒出現,但現在卻出現了。
您有數百條提交需要篩選。
git bisect
可自動執行該過程,而無需手動檢查每個提交。工作原理如下:
A)開始二分會話:
git bisect start
B)將目前提交標記為「壞」:
git bisect bad
C)標記已知的「良好」提交(例如,上個月的提交):
git bisect good <commit-hash>
D)Git 會自動檢出中間的提交。測試您的應用程式並將其標記為“好”或“壞”:
git bisect good # or git bisect bad
E) 重複,直到 Git 找到引入錯誤的確切提交。
專業提示:您可以透過編寫腳本來測試每個提交來自動化此流程。例如:
git bisect run ./test-script.sh
Git 不僅僅是commit
、 push
和pull
。這些隱藏的寶石可以節省您的時間,解決複雜的問題,並使您成為更有效率的開發人員。無論您使用git bisect
進行除錯、使用git worktree
管理多個分支還是使用git replace
清理歷史記錄,這些命令都是您的秘密武器。
因此,下次您陷入 Git 兔子洞時,請記住:可能有一個命令可以解決該問題。祝您編碼愉快,並希望您的合併始終無衝突! 🚀
我熱衷於建立創新的開源解決方案來簡化和增強開發人員的工作流程。 ArpitStack.com是我的個人作品集,我在這裡展示我的作品,包括SecretStack 、 CloudStack等專案。
歡迎隨意探索我的GitHub Repos以獲得創新解決方案,如果您發現我的工作有價值,請考慮透過GitHub Sponsors或為我買杯咖啡來支持我。非常感謝您的支持❤️!
原文出處:https://dev.to/arpitstack/10-secret-git-commands-that-will-save-you-5-hours-every-week-1mpn