本文譯自:Git Cheat Sheet: 12 Essential Git Commands For Intermediate Users。
本系列共有三篇文章,本文是第二篇:
Git Cheat Sheet: 12 Essential Git Commands For Beginners
Git Cheat Sheet: 12 Essential Git Commands For Intermediate Users(本文)
Git Cheat Sheet: 14 Essential Git Commands For Experts
在之前的文章中,我們討論了一些初學者必備的 Git 命令。然而,這些命令僅僅觸及了 Git 功能的皮毛。
在本篇文章中,我們將介紹中級用戶必備的 12 個 Git 命令。
git config
git config 命令用于設置 Git 配置。使用這個命令,用戶可以在三個不同級別設置配置:
本地級別:在特定的 Git 倉庫中(存儲在項目根目錄的 .git/config 文件中)。
全局級別:針對操作系統中的當前用戶。
系統級別:針對操作系統中的所有用戶。
默認情況下,git config 命令會更改本地級別的設置。此命令可用于設置諸如 Git 用戶名、電子郵件地址、默認文本編輯器(如 Vim)、默認合并行為、終端輸出外觀和別名等信息。
例如,可以使用以下命令設置當前用戶的名稱和電子郵件:
?
git?config?--global?user.name?"Your?Name" git?config?--global?user.email?"name@example.com"
?
可以使用以下命令將 Git 的默認文本編輯器設置為 Vim:
?
git?config?--global?core.editor?"vim"
?
列出所有當前 Git 的配置:
?
git?config?--list?--show-origin
?
git mv
git mv 命令用于在 Git 倉庫中移動和/或重命名文件。該命令會在工作目錄中移動文件,并更新 Git 索引中舊文件路徑和新文件路徑。
?
git?mv?path/to/old_file_name.ext?path/to/new_file_name.ext
?
需要注意的是,文件在您的文件系統中也會被重命名/移動,所以這個命令一舉兩得。然而,舊文件的歷史記錄都被 Git 跟蹤了,所以如果您發現需要舊版本,可以隨時找回。
git rm
git rm 命令用于從 Git 倉庫中刪除文件。它會在工作目錄中刪除文件,并從 Git 索引中移除文件。
要刪除特定文件:
?
git?rm?path/to/filename.ext
?
需要注意的是,此命令會從您的文件系統中刪除文件。然而,已刪除文件的歷史記錄仍被 Git 跟蹤,所以如果您后來發現需要它,可以隨時找回。
git diff
git diff 命令用于顯示提交、分支以及其他代碼狀態之間的差異。默認情況下,git diff 顯示工作樹與暫存區之間的差異。
該命令還可用于比較分支之間的差異:
?
git?diff?branch1?branch2
?
或者用于比較兩個提交之間的差異:
?
git?diff?commitID1?commitID2
?
為了比較一個特定文件,也可以加上第三個文件名參數:
?
git?diff?commitID1?commitID2?file_to_compare.ext
?
git reset
git reset 命令用于將分支恢復到先前的狀態。當給出提交、分支或其他引用時,該命令將分支和 HEAD 引用移動到指向該引用的位置。如果未提供引用參數,則默認將引用指向 HEAD。
該命令提供了三種操作模式:soft, mixed,和 hard。使用 soft 選項時,索引會被更新,但暫存的提交和工作目錄保持不變。使用 mixed 選項(默認選項)時,索引將被重置,已暫存的更改將被移回工作目錄。使用 hard 選項時,索引和工作目錄都會被重置,所有更改都將丟失。
要將暫存區重置為與最近的提交匹配,而不丟失工作區的任何數據,請使用以下命令:
?
git?reset
?
撤銷所有當前的更改并將工作區重置為與最近的提交匹配,請使用以下命令:
?
git?reset?--hard
?
git tag
git tag 命令用于創建一個人類可讀的標簽(例如版本號),用于引用存儲庫中特定的提交。標簽在本質上是一個引用,類似于分支名稱,但標簽通常是靜態的,因為它們指向單個提交,而分支名稱是動態的,因為它們跟蹤分支的末端,并隨著新的提交添加而更新。通常情況下,標簽在標記發布版本時很有用。
為當前簽出的 Git 提交創建一個標記:
?
git?tag?tag_name
?
git rebase
Git rebase 命令允許用戶將一系列提交移動到一個新的基礎提交上。如果用戶提供了一個引用參數,則該分支將在該分支上進行 rebase。否則,默認情況下,該分支將在遠程分支上進行 rebase。
?
git?rebase?origin
?
通過在 rebase 命令中添加 -i 選項,用戶可以執行交互式 rebase。在交互式 rebase 中,用戶還可以組合、拆分、重新排序、刪除和編輯提交記錄。
git cherry-pick
git cherry-pick 命令接受一個或多個提交記錄,并將它們應用到一個現有的分支上。該命令提供了一種快速將提交記錄添加到多個分支的方式,而無需執行 rebase 操作。
要將單個提交記錄選取并應用到當前分支上,可以執行以下操作:
?
git?cherry-pick?commitID
?
用戶也可以選取一系列提交記錄并將它們應用到分支上。默認情況下,cherry-pick 不包含第一個提交記錄,但會包含最后一個提交記錄。
?
git?cherry-pick?oldest_commit...newest_commit
?
要讓 cherry-pick 命令包含第一個和最后一個提交記錄,可以將命令更新如下:
?
git?cherry-pick?oldest_commit^...newest_commit
?
git bisect
git bisect 命令用于通過對提交歷史記錄進行二分查找來分離出特定的提交記錄。該命令在幫助我們找出是哪個提交引入了 bug 時非常有用。
要運行這個命令,需要先找到一個問題未發生的過去提交記錄,這里稱之為 "good_commit_id"。然后在最近的分支上運行以下命令:
?
git?bisect?start git?bisect?bad git?bisect?good?good_commit_id
?
Git 會對提交記錄進行二分查找,它會檢查當前提交和上一個好的提交之間的提交記錄。此時,開發人員需要檢查或測試代碼,以確定 bug 是否仍然存在。如果 bug 仍然存在,則運行 git bisect bad 命令;如果 bug 不存在,則運行 git bisect good 命令。
一旦找到了引入 bug 的提交記錄,搜索就會返回第一個壞的提交記錄的 commit ID。從這里開始,用戶可以檢查引入 bug 的提交記錄。然后可以使用 git bisect reset 命令將分支恢復到執行搜索之前的狀態。
這為開發人員快速追蹤 bug 的源頭提供了一種方法,因為每次將提交歷史記錄分成兩半,可以指數級地減少需要手動檢查的提交記錄數量。
git revert
git revert 命令用于撤消之前提交的更改。該命令接受一個 commit ID,然后在當前分支上創建一個新的提交記錄,以反轉 revert 提交記錄中的更改。這種方法允許用戶撤消一個更改,而無需重寫歷史記錄。執行該命令將在分支的末尾產生一個新的提交記錄,用于撤消 revert 的提交記錄中的更改。
?
git?revert?commitID
?
git fetch
git fetch 命令用于從遠程倉庫下載引用(包括標簽和分支)。它會下載新創建的引用,并完成本地已存儲引用的歷史記錄。與 git pull 不同,git fetch 命令不會更新本地倉庫的工作狀態,也不會執行合并操作。默認情況下,git fetch 命令會獲取當前倉庫的所有引用。
要從遠程倉庫獲取所有引用,請使用以下命令:
?
git?fetch?origin
?
要從特定分支獲取引用,請使用以下命令:
?
git?fetch?origin?branch_name
?
git blame
通過 git blame 命令,用戶可以查看文件中每一行最后一次修改的時間以及進行修改的責任人。該工具對于理解文件的歷史記錄非常有用,可以幫助用戶確定在代碼更改方面應該向誰尋求問題或建議。
要查看特定文件的此信息,請使用以下命令:
?
git?blame?path/to/filename.ext
?
總結
雖然在使用 Git 的最基本級別時不需要這些中級命令,但它們可以幫助用戶提高使用 Git 的效率。它們提供了一組強大的功能,可以幫助您成為一個全面發展的開發者,這通常意味著能夠以創造性的方式解決問題。
審核編輯:湯梓紅
評論
查看更多