2017-03-14 126 views
0

我有兩個分支,foobar根據master在我用git管理的項目中。假設我在foo下工作,在完成之後,我將這些更改與master合併。然後我轉到bar並重復該過程。但後來有人告訴我,我必須在foo上更改一些內容,所以我的第一個想法是重複一遍,但之後我失去了在bar分支下完成的所有工作。如何實現回來分支我的目的,然後當我用master合併我不會覆蓋bargit合併後分支變化

我試圖創造這些新變化,新的分支下所做的更改,但如果是這樣的方法,我發現分支有點無用。但我認爲git足夠聰明,可以做我想做的事。

+0

你是什麼意思「然後我去吧,重複這個過程」?你在哪裏合併?關於「我發現分支有點無用」,我認爲這取決於您的工作流程。對於你正在做的事情,這可能是沒用的。但是,在協作環境中,您可以擁有代碼審查和自動化測試等各個分支,並提供有關更改的反饋。分支在這種環境中非常有用。 – jszakmeister

回答

2

一系列圖表回答:

-

創建foobar關閉master後提交C:

     foo 
        /
master A ---- B ---- C 
         \ 
         bar 

工作在foo和合併到master:( git checkout master && git merge foo

foo     D ---- E ---- F 
        /    \ (merge-commit) 
master A ---- B ---- C --------------- G 
         \ 
         bar 

同時,bar獨立的進展..

foo     D ---- E ---- F 
        /    \ 
master A ---- B ---- C --------------- G 
         \ 
bar     D' ---- E' ----- F' 

你現在想與變化更新barmastergit pull origin master

foo     D ---- E ----------- F 
        /     \ 
master A ---- B ---- C ---------------------- G 
         \      \ 
bar     D' ---- E' ----- F' ---- G' (another merge-commit) 

另一個變化COMMITED上foo

foo     D ---- E ----------- F ---- H 
        /     \ 
master A ---- B ---- C ---------------------- G 
         \      \ 
bar     D' ---- E' ----- F' ---- G' 

然後,同步barfoogit checkout bar && git pull origin foo

foo     D ---- E ----------- F ---- H 
        /     \  \ 
master A ---- B ---- C ---------------------- G  \ 
         \      \  \ 
bar     D' ---- E' ----- F' ---- G'---- H' (another merge-commit) 

然後合併barmaster(與master作爲活躍的分支,git merge bar

foo     D ---- E ----------- F ---- H 
        /     \  \ 
master A ---- B ---- C ---------------------- G -----}-------- I (latest merge-commit) 
         \      \  \ /
bar     D' ---- E' ----- F' ---- G'---- H' --- 
+0

這看起來像我想做的事情。我會稍後再嘗試並發表評論。 'merge-commit'是一個命令嗎?在最後一步中,你可以用'master'而不是'bar'同步嗎? – mrbolichi

+0

no'merge-commit'不是一個命令,而是作爲合併兩個分支的結果的一個新提交。 – ashmaroli

+0

嘗試了用'master'改變'bar'的最後一步,並沒有在'master'中得到'foo'的更新。任何想法爲什麼? – mrbolichi

1

然後我去酒吧,並重覆上述過程

你爲什麼不合並主或富的吧?我不清楚這一點。

但是後來有人告訴我,我必須改變foo,所以我的第一個想法是再次重複,但後來我失去了在酒吧分支下完成的所有工作。

重複你是什麼意思?提交上次更改並簽出其他分支。

另外,如果您進行了更改,您將不會提交,您可以使用git存儲臨時存儲更改。

請指定您的問題獲取更多詳細幫助。

+0

我想使用'master'來獲得最新版本,即每個分支的最新提交。這是我的問題,當我添加對'master'後面的分支的更改時,我無法達到合併的目的:將master分支與另一分支上的更改結合(更新) – mrbolichi

1

如果您foobar分支尚未刪除,你可以變基

git checkout master 
git pull 
git checkout foo 
git rebase master 
git checkout bar 
git rebase master 

但理想情況下,如果你的foobar分支功能/問題,你應該只把它們合併時,它的完成掌握。如果太大,則將其分解爲較小的分支(嵌套或平面)。

我不重寫這取決於你的變化,以及爲什麼照顧,你合併bar分行master反正在酒吧

所做的更改。如果他完成的工作已完成,因爲該功能/修復已完成(這就是爲什麼您要合併它),所以它不屬於bar業務。實際上,當您完成功能/修復分支並將其合併到主設備時,最好將其刪除,因爲這樣做完成了。