在github上分支項目並計劃向上遊提交更改時,有幾種可能的工作流程。這是我的工作流程通常傾向於遵循(我會打電話給我從中已經分叉爲遠程source
回購,回購我作爲origin
)之一:
- 叉主枝通過
source
使用,讓我們假設master
爲origin/my-dev
。
origin/mydev
是我所有的改變和主要發展。
- 我經常將
remote/master
重新編號爲origin/master
(這一步是多餘的,但有時候我很容易在一個遙控器中找到所有東西)。
- 只要您想從上游獲取更改,請合併
source/master
或重新設置的origin/master
到origin/my-dev
。
- 如果我想向上遊提交補丁或bugfix,我會啓動一個新的功能分支,可以用於拉取請求。我會稱之爲
origin/my-feature-1
。我創建了此分支origin/master
(或source/master
)
- 我將這項功能的更改轉換爲
origin/my-feature-1
,並將origin/my-dev
中的此功能更改爲origin/my-feature-1
。完成此步驟後執行任何測試。
- 從
origin/my-feature-1
- 提交pull請求,如果你的拉請求被批准,修改將被合併到
source/master
(和origin/master
太)。
- 執行從
origin/master
(或source/master
)到origin/my-dev
的合併。
- 就分支機構的生命週期而言,我通常傾向於在我將它合併到上游之後擺脫短期主題或功能分支(分支只是git中引用特定提交的輕量級指針)。
不斷重複此工作流程。
的核心思想是,你拉的請求應該不會構成對上游維護者或他的任何嚴重衝突/她要盲目地拒絕了貢獻。
我舉例說明了一個例子,當您想從origin/my-dev
上游貢獻D2
和D3
。 D2'
和D3'
被重訂的D2
和D3
版本。與U
犯有上游提交的source
,D
在origin
您下游的提交。與M
後綴的是合併。
在視覺上,這是它會是什麼樣子:
source/master origin/my-dev
U1
U2 Initial-fork
U3-----------\
| \
| \------------D1
| D2
U4 Sync up from upstream |
U5-----------\ D3
| \ |
U6 \------------DM4 origin/feature-1
| |
| | Starting point of feature-1
U7------------------------------------------------------------D2' (Rebased version of D2)
| | D3' (Rebased version of D3)
| D5 /
U8 D6 Pull-request /
| | getting merged upstream/
UM9--------------------------------------------------------/
| |
| Resync |
|-------------\ my-dev |
U9 \ |
U10 \-----------DM7
| |
| |
我仍然有點不清楚什麼是長遠的辦法在這裏:你把這些功能分支?另外,我如何命名它們,如果它們只是錯誤修復的分支,而不是真正的功能?另外,當你對自己的主要分支進行重組時,你如何保持歷史記錄/確保你可以在將來的任何時候迴歸? (我問,因爲底墊和快進,提交SHA1將改變等) – cnst 2013-04-05 01:29:26
@cnst - 如果它是一個功能或錯誤修復不要緊,相同的工作流程可以不考慮該應用。最好命名你的分支來指示你正在嘗試修復的錯誤,比如:'fix-deadlock','fix-397'(如果你正在修復bug編號397)。如果你問'產地/ master'的,你會注意到,我不直接在產地'/ master'的承諾什麼,我的所有合併或底墊從'遠程/ master'的是快進的,所以我提到它是多餘的。 BTW快進合併不會更改任何提交的SHA1。我的所有提交都只在'origin/my-dev'上。 – Tuxdude 2013-04-05 01:39:35
所以你不需要'origin/master',對吧?你總是可以從source(remote)/ master'創建特性(貢獻)分支。 – 2018-01-09 07:44:14