2017-08-25 54 views
0

嘿,我有一個感覺非常簡單的問題,但我無法繞過它,試圖找到答案會導致很多類似但又微妙不同的問題的答案。應該用什麼git命令爲PR準備一個分支?

我一直在研究一箇舊的分支關閉功能,而其他團隊成員管理一個巨大的拉。現在他們完成了,我需要讓我的功能準備好提出請求。

我需要從我的分支(它跨越10-15次提交的3-4個文件)進行相關更改,並將它們與主站中的大量更改集成在一起(分佈在幾十個或幾百個文件中)的承諾)。我的版本的文件和版本之間會發生合併衝突,但它們很容易解決。什麼是傳統的方式來抓住我的分支(或建立一個結合主+舊分支的新分支)並解決衝突?我開始進行重組,但最終不得不解決了叉子以來發生在主人身上的每一次提交,這似乎完全沒有必要和耗時。

謝謝!

+1

要麼將​​主人合併到您的分支,要麼將您的分支重新分配到主人。 – knittl

+0

使用提交創建補丁並應用於新分支 – MaNKuR

回答

0

這樣做的典型方法是將git pull master放入分支並解決衝突。然後git push你的分支。這對於拉動請求來說很少令人頭痛。

+0

這不會導致必須對很多與我在分支中所做更改無關的文件進行排序嗎? – gewl

+0

Git會自動合併所有不是衝突的東西,但是,您需要提交它們。沒有辦法解決這個問題,除非你的pull請求處理選擇了文件。 – TriskalJM

+0

看起來很迂迴 - 在〜100個文件中存在合併衝突,但我只想處理其中的3個文件。在所有其他情況下,我想要順從主人。有沒有更直接的方式來做到這一點? – gewl

0

由於TriskalJM stated通常的做法是將git pull master放入你的分支,然後git push然後PR。但是,正如您所說,在您的使用案例中,rebase可能會讓您以每次提交爲基礎處理衝突。我建議您根據實際結果檢查一些方法。

我認爲合理處理master分支和舊功能分支的合併是分開對舊功能進行新修改的結果。爲此,您可以試着挑選您在功能分支上對主設備所做的更改(或者更好地從主設備創建一個新分支,對其進行櫻桃挑選,然後合併,然後結果進行檢查,以隔離它)。如果這對你更加清晰,也可以嘗試,而不是:

  1. 從特徵做一個新的分支但從最後的更改之前提交。我們稱之爲feature1。與合併,處理衝突。
  2. Cherrypick 您的提交從功能feature 1
  3. 檢查結果併發布到master

對於merge與功能分支,你可以檢查一個選項是,在第一來給你簡單rebase方法有效了。我所指的是mergerebase命令的strategy選項。

使用git rebase ... -s recursive -X theirs勢力衝突的帥哥是自動解決通過支持他們的版本乾淨」(即theirs = master在這種情況下)。

注1:注意,可能是在文檔有點混亂,存在一個名爲ours合併戰略,並稱爲遞歸的選項的戰略要求ours(或theirs在我的建議)。 git merge ... -s ours <>git merge ... -s recursive -X ours

相關問題