簡體   English   中英

GIT - 如何合並分支?

[英]GIT - how to merge branches?

我們決定在我們公司使用GIT,但現在遇到了問題。我們有幾個不同功能的分支機構。 現在我們需要的是合並分支並將其推送到Master。 我們如何使用autoreplace做到這一點 - 我們有branch-a,branch-b,branch-c - 我們需要在Master中獲取它們但是在重復文件的情況下,branch-b應該是Major而branch-c-minor。

UPD:

branch-a:
-file1
-file2
-file3
-file4


branch-b:
-file1
-file5
-file6


branch-c:
-file1
-file2
-file7
-file8

我們需要結果:

Master:
-file1 (from b)
-file2 (from a)
-file3 (from a)
-file4 (from a)
-file5 (from b)
-file6 (from b)
-file7 (from c)
-file8 (from c)

執行章魚合並,不提交'--no-commit'。 來自大師

git merge --no-commit branch-a branch-b branch-c

解決所有沖突,然后根據需要,獲取文件的特定版本並提交:

git checkout branch-b -- file3

重復其他特定文件。

git add . -A
git commit

這是您的自定義工作流程的工作方式。

希望這可以幫助。

我沒有測試過這個,但這可能會做你想要的:

git checkout master
git merge -s recursive -X theirs branch-c
git merge -s recursive -X theirs branch-a
git merge -s recursive -X theirs branch-b

這是使用recursive合並策略,但是說如果在合並時有任何沖突,要始終解決它們以支持您正在合並到當前分支的分支。 要找到這個文件,看看上的遞歸合並策略部分的git合並手冊頁 ,以及ourstheirs選擇,這一策略。

這樣做的問題是,如果您對每個分支中的文件所做的更改不會發生沖突,那么您將從一個分支中獲得一些更改,而在另一個分支中進行一些更改。 如果這不是你想要的(我承認我不太了解你的工作流程),你可能不得不做,例如:

git merge --no-commit branch-c

...然后在提交合並提交之前,使用您手動要的每個文件版本更新索引。 運行該命令后,您可以找到兩個分支上存在的所有文件:

comm -1 -2 <(git ls-tree -r --name-only master|sort) <(git ls-tree -r --name-only branch-c|sort) > common.txt

...然后為每個選擇branch-c版本:

xargs -n 1 git checkout branch-c -- < common.txt

...然后像往常一樣使用git commit

重申一下,我很確定我永遠不會想要這樣做 - git的默認合並行為幾乎總能做到我想要的,只留下真正的沖突來解決。

文件副本 - 一個簡單的選擇

一種方法是檢查主分支。 在單獨的存儲庫中,簽出次要和主要分支文件。 復制次要文件,然后復制主要文件,以便主要文件覆蓋次要文件。 然后提交結果。

文件副本甚至可以讓您根據具體情況(如果需要)決定是否真的希望主文件覆蓋次要文件,一個好的文件復制程序將為您提供文件的日期和文件大小也可能是預覽,以幫助您做出明智的決定。

這可能不是針對您的特定情況做事的最佳方式。 只需將其視為工具箱中的額外工具即可。 當然,如果合並是你想要做的,而不僅僅是覆蓋,那么git仍然是使用的工具,與kdiff3等合並工具一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM