当使用git merge将主题分支“B”合并为“A”时,我得到了一些冲突。我知道所有的冲突都可以用B的版本解决。
我知道git合并是我们的。但我想要的是类似git merge -s的东西。
为什么它不存在?如何在与现有git命令冲突合并后实现相同的结果?(git从B中检出所有未合并的文件)
仅仅丢弃分支A中的任何东西(合并提交点到树的B版本)的“解决方案”不是我想要的。
当使用git merge将主题分支“B”合并为“A”时,我得到了一些冲突。我知道所有的冲突都可以用B的版本解决。
我知道git合并是我们的。但我想要的是类似git merge -s的东西。
为什么它不存在?如何在与现有git命令冲突合并后实现相同的结果?(git从B中检出所有未合并的文件)
仅仅丢弃分支A中的任何东西(合并提交点到树的B版本)的“解决方案”不是我想要的。
当前回答
等价于'git merge -s their branchB'(保持父顺序)
在合并之前:
! !确保你处于清洁状态!!
进行合并:
git commit-tree -m "take theirs" -p HEAD -p branchB 'branchB^{tree}'
git reset --hard 36daf519952 # is the output of the prev command
我们做了什么? 我们创建了一个新的提交,它的两个父节点是我们的和他们的,提交的连接是他们的分支b
合并后:
更准确地说应该是:
git commit-tree -m "take theirs" -p HEAD -p 'SOURCE^{commit}' 'SOURCE^{tree}'
其他回答
我觉得你真正想要的是
git checkout -B mergeBranch branchB
git merge -s ours branchA
git checkout branchA
git merge mergeBranch
git branch -D mergeBranch
这看起来很笨拙,但应该有用。我唯一不喜欢这个解决方案的是git的历史会令人困惑…但至少历史记录将被完全保存,您不需要为删除的文件做什么特别的事情。
我解决了我的问题
git checkout -m old
git checkout -b new B
git merge -s ours old
这个答案是由Paul Pladijs给出的。为了方便起见,我只是把他的命令做了一个git别名。
编辑你的.gitconfig并添加以下内容:
[alias]
mergetheirs = "!git merge -s ours \"$1\" && git branch temp_THEIRS && git reset --hard \"$1\" && git reset --soft temp_THEIRS && git commit --amend && git branch -D temp_THEIRS"
然后你可以“git merge -s their A”通过运行:
git checkout B (optional, just making sure we're on branch B)
git mergetheirs A
我最近需要为两个共享共同历史的独立存储库执行此操作。我从:
Org/repository1主 Org/repository2主
我希望将repository2 master的所有更改应用到repository1 master,接受repository2所做的所有更改。在git的术语中,这应该是一个称为-s their的策略,但它不存在。要小心,因为-X their的名字就像你想要的那样,但它不是一样的(它甚至在手册页中这样说)。
我解决这个问题的方法是到repository2并创建一个新的分支repo1-merge。在那个分支中,我运行git拉git@gitlab.com:Org/repository1 -s ours,它合并得很好,没有问题。然后我把它推到遥控器上。
然后回到repository1并创建一个新的分支rep2 -merge。在该分支中,我运行git拉git@gitlab.com:Org/repository2 repo1-merge,它将与问题一起完成。
最后,您可能需要在repository1中发出合并请求,使其成为新的主节点,或者只是将其作为一个分支。
旧版本的git允许你使用“their”合并策略:
git pull --strategy=theirs remote_branch
但是这已经被删除了,正如Junio Hamano (Git维护者)在这条消息中解释的那样。正如链接中提到的,相反,你会这样做:
git fetch origin
git reset --hard origin
但是要注意,这与实际的合并不同。你的解决方案可能就是你真正在寻找的选项。