Git -合并远程分支和未提交的更改并选择他们的



我遇到了一个关于使用git的小问题-我想将我的当前分支(我们称之为foo)与目标分支(bar)合并。但是,我在foo上有未提交的更改,我宁愿不提交,并且这些更改与bar上的更改相冲突。我想要实现的是合并这些分支,当涉及到冲突的文件时,从bar中选择文件。

我试过使用

git merge origin/%TARGET_BRANCH% --strategy-option theirs

然而,这似乎只是抛出一个错误"你对以下文件的本地更改将被merge"覆盖;和中止。

是否有一种方法可以使用git命令来实现,或者我必须创建某种解决方案(例如解析所有冲突的文件,重置它们,然后再次尝试合并)?

感谢您的宝贵时间。

foo创建一个分支,命名为foo-2

git checkout foo
git checkout -b foo-2

将未提交的更改提交到foo-2。然后将foobar合并并解决任何冲突。这将合并foobar,而不需要您当前未提交的编辑。

git checkout bar
git merge foo

你可以决定合并foo-2bar,只要你准备好了。您可以在执行此操作时选择冲突文件的版本。

我想将我当前的分支(让我们称之为foo)与目标分支(bar)合并。但是,我在foo上有未提交的更改…

你不能那样做。

更准确地说,git merge本身不允许您在任何需要实际合并的情况下这样做(正如您所看到的)。一些合并内部允许您这样做,但是不这样做。这是(不可挽回的)灾难的配方。git stash代码有时会这样做,这也是我试图劝阻人们不要使用git stash的原因之一。当它起作用时,它很好!但一旦出了问题,就没有挽回的余地了。

参考TheIceBear给出的答案。另一个是,正如我提到的,使用git stash-但这只是做一个提交。(实际上,它使两个提交,但您随后只使用其中一个;另一个是"垃圾提交"。这两个提交都将被删除,并最终在稍后被垃圾收集。)git stash所做的提交的唯一特殊之处在于它们在而不是分支上,并且git stash apply不安全地使用git merge。我更喜欢第一种方法,即通过foo-2这样的分支名称进行显式提交。

相关内容

最新更新