我遇到了一个关于使用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
。然后将foo
与bar
合并并解决任何冲突。这将合并foo
到bar
,而不需要您当前未提交的编辑。
git checkout bar
git merge foo
你可以决定合并foo-2
到bar
,只要你准备好了。您可以在执行此操作时选择冲突文件的版本。
我想将我当前的分支(让我们称之为
foo
)与目标分支(bar)合并。但是,我在foo
上有未提交的更改…
你不能那样做。
更准确地说,git merge
本身不允许您在任何需要实际合并的情况下这样做(正如您所看到的)。一些合并内部将允许您这样做,但是不这样做。这是(不可挽回的)灾难的配方。git stash
代码有时会这样做,这也是我试图劝阻人们不要使用git stash
的原因之一。当它起作用时,它很好!但一旦出了问题,就没有挽回的余地了。
参考TheIceBear给出的答案。另一个是,正如我提到的,使用git stash
-但这只是做一个提交。(实际上,它使两个提交,但您随后只使用其中一个;另一个是"垃圾提交"。这两个提交都将被删除,并最终在稍后被垃圾收集。)git stash
所做的提交的唯一特殊之处在于它们在而不是分支上,并且git stash apply
不安全地使用git merge
。我更喜欢第一种方法,即通过foo-2
这样的分支名称进行显式提交。