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