2016-03-23 70 views
0

我對Github沒有經驗,所以我希望有人能幫我弄清楚正確的命令序列。正確的Github Rebase工作

我在Github上回購呈現這樣的情況:

------master  
    /
-- dev 
    \ 
     --------extrabranch c11 --- extrabranch c12 

也就是說,從去年開始提交上dev,我合併它master,然後創建一個新的分支extrabranch並添加兩個提交給該分支。 這種情況在Github遠程倉庫和本地倉庫中是一樣的。

現在我想在dev上重新編號extrabranch

本地嘗試:

git rebase dev extrabranch 
Current branch extrabranch is up to date. 
git pull --rebase 
Current branch extrabranch is up to date. 

但提交圖表保持與上述相同。 有人可以向我解釋爲什麼分支dev不包含提交extrabranch的提交c11c12

編輯:我的目標是合併extrabranchdev,並刪除extrabranch,儘可能乾淨。

+1

這聽起來不像rebase實際上是你想要在這裏做的。 'extrabranch' *已經*基於開發。你認爲提交圖看起來像什麼? – Ajedi32

+0

感謝:「已經」是偉大的關鍵字。 –

回答

3

讓我們來看看你的圖。我已修改它以顯示提交c10,這是masterdev指向的位置。你的插圖沒有顯示這一點,但根據定義,必須在那裏提交。

-- c10 [master, dev] 
    \ 
     --- c11 --- c12 [extrabranch] 

git rebase的目的是移動提交,基於圖中的特定點。您正在告訴git將extrabranch (c11 + c12)重置爲dev (c10)。但是,extrabranch已經基於dev,所以沒有任何關係。

你說你的目標是合併extrabranchdev,然後刪除extrabranch儘可能乾淨。最簡單的方法是合併它。因爲這種方式沒有衝突,所以它會使用快進合併。

git checkout dev 
git merge extrabranch 

這將移動dev分支到c12坐鎮。

-- c10 [master] 
    \ 
     --- c11 --- c12 [extrabranch, dev] 

之後,你應該可以刪除extrabranch如果你想。

git branch -d extrabranch 
-- c10 [master] 
    \ 
     --- c11 --- c12 [dev] 

這是假設不存在上游提交上dev,你的帖子沒有顯示。不過,您可以使用pullfetch來解釋這一點。

+0

完美地工作,並理解我的概念錯誤。如果有人有我的同樣的問題,我添加一個額外的:刪除本地extrabranch後,在github上更新我使用附加命令:'git branch -d origin/extrabranch'來刪除遠程分支。謝謝@ dan-lowe –

+1

不應該在'[dev]'部分提交'c11'和'c12'來代替它嗎?現在看來'c11'已經被合併到'master'中了... – Peter

+0

@Peter好點,我的插圖很混亂,實際上他們錯了。我已經重新繪製了它們,並試圖清理答案更加清晰。 –