11=== 分支和合併的基本用法
22
3- 讓我們來看一個你在現實生活中,有可能會用到的分支與合併工作流程的簡單範例 ,
3+ 讓我們來看一個你在現實生活中,有可能會用到的分支(branch)與合併(merge)工作流程的簡單範例 ,
44你做了以下動作:
55
66. 開發一個網站。
77. 建立一個分支以實現一個新故事。
88. 在這個分支上進行開發。
99
10- 此時你接到一個電話,有個很危急的問題需要緊急修正,
10+ 此時你接到一個電話,有個很危急的問題需要緊急修正(hotfix) ,
1111你可以按照下面的方式處理:
1212
1313. 切換到發佈產品用的分支。
1414. 在同一個提交上建立一個新分支,在這個分支上修正問題。
15- . 通過測試後,切回發佈產品用的分支,將修正用的分支合併進來,然後再推送出去以發佈產品 。
15+ . 通過測試後,切回發佈產品用的分支,將修正用的分支合併進來,然後再推送(push)出去以發佈產品 。
1616. 切換到之前實現新需求的分支以繼續工作。
1717
1818[[_basic_branching]]
1919==== 分支的基本用法
2020
2121(((branches, basic workflow)))
22- 首先,我們假設你正在開發你的專案,並且已經有一些提交了 。
22+ 首先,我們假設你正在開發你的專案,並且已經有一些提交(commit)了 。
2323
2424.一個簡單的提交歷史
2525image::images/basic-branching-1.png[一個簡單的提交歷史。]
2626
27- 無論你的公司使用的議題追蹤系統是哪一套 ,你決定要修正其中的議題 #53;
27+ 無論你的公司使用的議題追蹤系統(issue-tracking system)是哪一套 ,你決定要修正其中的議題 #53;
2828要同時新建並切換到新分支,你可以在執行 `git checkout` 時加上 `-b` 選項:
2929
3030[source,console]
@@ -45,7 +45,7 @@ $ git checkout iss53
4545image::images/basic-branching-2.png[建立一個新分支指標。]
4646
4747你開始開發網站,並做了一些提交;
48- 因為你檢出了這個分支 (也就是 `HEAD` 指標正指向它),`iss53` 分支也隨之向前推進:
48+ 因為你檢出(checkout)了這個分支 (也就是 `HEAD` 指標正指向它),`iss53` 分支也隨之向前推進:
4949
5050[source,console]
5151----
@@ -57,12 +57,12 @@ $ git commit -a -m 'added a new footer [issue 53]'
5757image::images/basic-branching-3.png[分支 `iss53` 會隨工作進展向前推進。]
5858
5959現在你接到電話,那個網站有一個問題需要立即修正;
60- 有了 Git ,你就不用把你的緊急修正連同 `iss53` 尚未完成的內容一起部署到正式環境 ;你也不用為了正確地套用修正而先花一大堆功夫回復之前 `iss53` 的修改;
60+ 有了 Git ,你就不用把你的緊急修正連同 `iss53` 尚未完成的內容一起部署(deploy)到正式環境 ;你也不用為了正確地套用修正而先花一大堆功夫回復之前 `iss53` 的修改;
6161唯一需要做的只是切換回發佈產品用的 `master` 分支。
6262
63- 然而,在切換分支之前,留意一下你的工作目錄或預存區裡是否有還沒提交的內容 ,它可能會和你即要檢出的分支產生衝突,Git 會因此而不讓你切換分支;
63+ 然而,在切換分支之前,留意一下你的工作目錄或預存區(staging area)裡是否有還沒提交的內容 ,它可能會和你即要檢出的分支產生衝突(conflict) ,Git 會因此而不讓你切換分支;
6464所以切換分支的時候最好先保持一個乾淨的工作區域。
65- 稍後會在 <<_git_stashing>> 中介紹幾個繞過這種問題的辦法(分別叫做「使用收藏」和「提交的修訂方法」)。
65+ 稍後會在 <<_git_stashing>> 中介紹幾個繞過這種問題的辦法(分別叫做「使用收藏(stashing) 」和「提交的修訂方法(commit amending) 」)。
6666目前先讓我們假設你已經提交了所有的變更,因此你可以切回 `master` 分支了:
6767
6868[source,console]
@@ -72,7 +72,7 @@ Switched to branch 'master'
7272----
7373
7474此時工作目錄中的內容和你在解決問題 #53 之前的內容一模一樣,你可以集中精力進行緊急修正了;
75- 很重要的一點需要牢記:當你切換分支時,Git 會重置工作目錄內容 ,就像回到你在這個分支最後一次提交後的內容,
75+ 很重要的一點需要牢記:當你切換分支時,Git 會重置(reset)工作目錄內容 ,就像回到你在這個分支最後一次提交後的內容,
7676它會自動地增加、刪除和修改檔案以確保工作目錄的內容和當時的內容完全一樣。
7777
7878接下來開始緊急修正;
@@ -106,7 +106,7 @@ Fast-forward
106106
107107注意合併時有一個「Fast-forward」字眼;
108108由於你要合併的分支 `hotfix` 所指向的提交 `C4` 直接超前了提交 `C2`,Git 於是簡單地把分支指標向前推進;
109- 換句話說,如果想要合併的提交可以直接往回追溯歷史到目前所在的提交,Git 會因為沒有需要合併的工作而簡單地把指標向前推進——這就是所謂的「快進」。
109+ 換句話說,如果想要合併的提交可以直接往回追溯歷史到目前所在的提交,Git 會因為沒有需要合併的工作而簡單地把指標向前推進——這就是所謂的「快進(fast-forward) 」。
110110
111111現在你的修改已經含在 `master` 分支所指向的提交的快照中,你可以部署該修正了。
112112
@@ -162,13 +162,13 @@ index.html | 1 +
162162這次的合併和之前合併 `hotfix` 的情況看起來有點不一樣;
163163在這種情況下,你的開發歷史是從一個較早的點便開始分離開來,
164164由於目前所在的提交(譯註:C4)並不是被合併的分支(譯註:`iss53`,它指向 C5)的直接祖先,Git 必需進行一些處理;
165- 就此例而言,Git 會用兩個分支末端的快照(譯註:C4、C5)以及它們的共同祖先(譯註:C2)進行一次簡單的三方合併。
165+ 就此例而言,Git 會用兩個分支末端的快照(譯註:C4、C5)以及它們的共同祖先(譯註:C2)進行一次簡單的三方合併(three-way merge) 。
166166
167167.典型的合併會用到的三個快照
168168image::images/basic-merging-1.png[典型的合併會用到的三個快照。]
169169
170170不同於將分支指標向前推進,Git 會對三方合併後的結果產生一個新的快照,並自動建立一個指向這個快照的提交(譯註:C6)。
171- 這個提交被稱為「合併提交」,特別的是它的親代超過一個 (譯註:C4 和 C5)。
171+ 這個提交被稱為「合併提交(merge commit)」,特別的是它的親代(parent)超過一個 (譯註:C4 和 C5)。
172172
173173.一個合併提交
174174image::images/basic-merging-2.png[一個合併提交]
@@ -201,7 +201,7 @@ Automatic merge failed; fix conflicts and then commit the result.
201201----
202202
203203Git 沒有自動產生新的合併提交,
204- 它會暫停下來等你解決衝突 ;
204+ 它會暫停下來等你解決(resolve)衝突 ;
205205在合併衝突發生後的任何時候,如果你要看看哪些檔案還沒有合併,可以使用 `git status`:
206206
207207[source,console]
@@ -220,7 +220,7 @@ no changes added to commit (use "git add" and/or "git commit -a")
220220----
221221
222222它會列出所有有合併衝突且仍未解決的檔案(譯註:列在 `Unmerged paths:` 下面);
223- Git 會在有衝突的檔案裡加入標準的「衝突解決」標記,因此你可以手動開啟它們以解決這些衝突;
223+ Git 會在有衝突的檔案裡加入標準的「衝突解決(conflict-resolution) 」標記,因此你可以手動開啟它們以解決這些衝突;
224224你的檔案會包含類似下面這樣子的區段:
225225
226226[source,html]
247247
248248這個解決方案分別採納了兩個分支中的各一部分內容,並且完整地移除了 `<<<<<<<`、`=======` 和 `>>>>>>>` 這些標記行。
249249在解決了每個衝突檔案裡的每個衝突後,對每個檔案執行 `git add` 會將它們標記為已解決狀態,
250- 因為預存動作代表了衝突已經解決 。
250+ 因為預存(stage)動作代表了衝突已經解決 。
251251
252252如果你想用圖形介面的工具來解決這些衝突,你可以執行 `git mergetool`,它會呼叫一個適當的視覺化合併工具並引導你解決衝突:(((git commands, mergetool)))
253253
0 commit comments