2015-04-07 88 views
1

要處理某個功能,我從development產生一個新的feature分支,對其進行處理並向development提交合並請求(MR)。在我的工作featuredevelopment分支可以改變很多。爲合併請求準備分支

爲了避免提交我的MR合併之前,我合併最新development衝突爲feature,和我的feature提交與其他噸的提交從development混合,使得提交歷史相當難看,我估計很難過審查。

我想到了這一點,準備當MR:
而是合併developmentfeature的,從最新development創建新的分支feature-mr,然後合併或摘櫻桃從featurefeature-mr,最後提交MR的feature-mrdevelopment

我不知道這種常見問題是否有一種常見的做法。

回答

4

您要找的是git rebase development

您的資料庫看起來像這樣,其中feature落後於development

A - B - C - D - E [development] 
    \ 
     F - G - H [feature] 

git rebase development將在開發之上重播每個功能補丁。有點像櫻桃採摘F,G和H.你結束了這一點。

A - B - C - D - E [development] 
    \   \ 
     F - G - H F1 - G1 - H1 [feature] 

F,G和H最終會被垃圾收集。這需要幾周的時間,所以你可以回到他們身上,如果底線變得混亂了。

您可以使用git pull --rebase origin development一步更新您的存儲庫並重新署名feature。這將執行git fetch origin,然後git rebase origin/development而不是git merge origin/development。請注意,您的本地development分支不會更新,您必須這樣做。如果這讓您感到困惑,請忽略它,並繼續您的正常工作流程替換git merge developmentgit rebase development

請注意,由於提交ID更改,如果您已推入feature,則會出現問題。你將不得不git push --force和其他人在feature工作將很難拉。

+0

謝謝你的回答。如果我定期「合併」拉開發展,然後在'feature'上開發'git rebase development',你的方法是否可行?原因是,我工作的地方每個人都在合併,而且我不習慣重新設定/解決分配衝突的問題。 – kiruwka

+0

@kiruwka是的,發展如何得到更新並不重要。讓我編輯答案,以澄清我的意思是「拉開發展」。 – Schwern

+1

已接受。我試過了:1)首先通過'git pull'更新我的本地'development',然後2)'git rebase development'功能。第二步確實出現了重新佈局衝突,我必須逐個解決衝突,併爲每個衝突提交應用'git rebase --continue'。儘管如此,它並沒有太多問題,並且最終似乎工作正常。然而,我沒有提交MR之後這樣做,但希望這將工作得很好:) – kiruwka