章節 ▾ 第二版

A3.4 附錄 C:Git 命令 - 分支和合並

分支與合併

Git 的分支和合並功能主要由為數不多的幾個命令實現。

git branch

git branch 命令實際上是一個分支管理工具。它可以列出您擁有的分支、建立新分支、刪除分支以及重新命名分支。

Git 分支》一章的大部分內容都專注於 branch 命令,並且在整個章節中都有使用。我們首先在 建立新分支 中介紹它,並在 分支管理 中介紹其大部分其他功能(列出和刪除)。

跟蹤分支 中,我們使用 git branch -u 選項來設定跟蹤分支。

最後,我們在 Git 引用 中深入探討了它的一些後臺工作原理。

git checkout

git checkout 命令用於切換分支並將內容檢出到您的工作目錄。

我們首先在 切換分支 中遇到該命令,以及 git branch 命令。

跟蹤分支 中,我們看到了如何使用 --track 標誌來開始跟蹤分支。

檢出衝突 中,我們使用 --conflict=diff3 來重新引入檔案衝突。

我們在 Reset 揭秘 中更詳細地探討了它與 git reset 的關係。

最後,我們在 HEAD 中深入瞭解了一些實現細節。

git merge

git merge 工具用於將一個或多個分支合併到您已檢出的分支中。然後,它會將當前分支前進到合併結果。

git merge 命令首次在 基本分支 中介紹。儘管在本書的各個地方都有使用,但 merge 命令的變化非常少——通常只是 git merge <branch>,後跟您要合併的單個分支的名稱。

我們在 公開專案 的末尾介紹瞭如何執行壓縮合並(Git 合併工作,但假裝它只是一個新提交,而不記錄您正在合併的分支的歷史)。

高階合併 中,我們詳細介紹了合併過程和命令,包括 -Xignore-space-change 命令和用於中止有問題的合併的 --abort 標誌。

簽名提交 中,我們學習瞭如何在專案使用 GPG 簽名時,在合併之前驗證簽名。

最後,我們在 子樹合併 中瞭解了子樹合併。

git mergetool

git mergetool 命令只是啟動一個外部合併助手,以防您在 Git 中遇到合併問題。

我們在 基本合併衝突 中簡要提到了它,並在 外部合併和差異工具 中詳細介紹瞭如何實現自己的外部合併工具。

git log

git log 命令用於顯示專案從最新提交快照向後追溯的可達到的已記錄歷史。預設情況下,它只會顯示您當前所在分支的歷史記錄,但可以指定不同的或甚至多個頭或分支進行遍歷。它也經常用於在提交級別顯示兩個或多個分支之間的差異。

此命令幾乎在本書的每個章節中都用於演示專案的歷史。

我們在 檢視提交歷史 中介紹並深入討論了該命令。在那裡,我們查看了 -p--stat 選項以瞭解每個提交引入的內容,以及 --pretty--oneline 選項以更簡潔地檢視歷史記錄,以及一些簡單的日期和作者過濾選項。

建立新分支 中,我們使用 --decorate 選項來輕鬆視覺化分支指標的位置,並且我們還使用 --graph 選項來檢視分叉歷史的外觀。

小型私有團隊提交範圍 中,我們介紹了 branchA..branchB 語法,用於使用 git log 命令檢視相對於另一個分支,某個分支特有的提交。在 提交範圍 中,我們對此進行了相當廣泛的探討。

合併日誌三點 中,我們介紹了使用 branchA…​branchB 格式和 --left-right 語法來檢視存在於一個分支但不在另一個分支中的內容。在 合併日誌 中,我們還探討了如何使用 --merge 選項來幫助除錯合併衝突,以及使用 --cc 選項來檢視歷史記錄中的合併提交衝突。

RefLog 簡寫 中,我們使用 -g 選項透過此工具檢視 Git reflog,而不是進行分支遍歷。

搜尋 中,我們探討了使用 -S-L 選項來執行相當複雜的搜尋,以查詢程式碼中歷史上發生過的事情,例如檢視某個函式的歷史。

簽名提交 中,我們看到了如何使用 --show-signaturegit log 輸出的每個提交中新增一個驗證字串,該字串基於提交是否有效簽名。

git stash

git stash 命令用於臨時儲存未提交的工作,以便清理工作目錄,而無需在分支上提交未完成的工作。

這基本上完全包含在 暫存和清理 中。

git tag

git tag 命令用於為程式碼歷史中的特定點新增永久書籤。通常,這用於釋出等。

該命令在 標記 中被介紹和詳細介紹,並在 標記您的釋出 中進行實踐。

我們還介紹瞭如何使用 -s 標誌建立 GPG 簽名標籤,以及使用 -v 標誌驗證簽名標籤,這在 簽名您的工作 中。