2014-01-06 83 views
0

是git的新手,我有這個愚蠢的問題 - 使用功能分支的正確方法是什麼?如何使用git分支

從我所收集的,這是我認爲它應該被用來:

得到了一些「開發」從分支簽出分支:

"feature-1" 
"feature-2" 
"feature-3" 

現在,一個或多個開發人員將在一個或多個功能分支上工作,並且當團隊領導想要將所有內容粘合在一起並測試時,他會將這些功能重新合併到「開發」主幹中。 但是,git似乎缺乏能夠從每個功能分支中選擇保留哪些更改(嘗試遞歸,耐心和每個其他合併策略),因此最終有時每個分支最終會覆蓋先前分支合併回來的內容'發展'。 事情變得更加糟糕,因爲開發人員繼續在分支上工作,團隊領導嘗試將它們不時合併到「開發」中以合併更改。

顯然,這不是正確的分支功能。但那麼正確的方法是什麼?

感謝

編輯:

只是爲了進一步說明,讓我們考慮一下我們這些文件在開發分支:

fileA (develop) 
fileB (develop) 
fileC (develop) 

現在,在 「功能-1」,這隻會接觸的fileA合併回:

fileA (conflict, theoretically solvable by the recursive/theirs strategy) 
fileB (develop) 
fileC (develop) 

接下來合併回「only-2」,只觸及fileB:

fileA (overwritten by feature-2!!!) 
fileB (conflict, theoretically solvable by the recursive/theirs strategy) 
fileC (develop) 

如何處理fileA?我希望它保留它的「功能-1」版本。

+0

這是「正確的方式」,只是正確合併,一切都會好的。 – zerkms

+1

這可能會退化爲意見類型的討論,但我不確定是否可以舉報。我個人認爲「如何在git中進行分支」是一個宗教討論。如果您可以將其重寫爲「我們希望以a-b-c的方式在git中進行分支,但是我們會收到x-y-z錯誤」,那麼您將更有可能獲得有用的答案。 – shoover

+0

@zerkms照顧評論我的編輯? – kellogs

回答

3

好像你還沒有嘗試過你所問的,只是假設它是如何工作的。

如果這是真的 - 那麼你的假設是不正確的。在git中合併2個分支時,它會計算源分支開始與HEAD(或您正在合併的任何其他變更集)之間的差異,並將其應用於目標變更集。

因此,遵循您的示例 - 當您合併feature-2時,fileA不會以任何方式進行修改,只是因爲它未在feature-2中修改。

所以根本沒有問題。

+0

好吧......好吧,在我的低調中,誰知道我旋轉了什麼旋鈕並吹了墊圈?請告訴我怎樣才能看到合併後發生了什麼變化 – kellogs

+0

@kellogs:'git diff'? – zerkms

+0

我認爲git diff HEAD ^做到了。 – kellogs