我正在合并一个可能有很多冲突的远程分支机构。我怎么知道它是否会有冲突?

我没看到任何类似于,git合并的预演。


当前回答

我只想看到冲突(不能看到他们与diff3在GitHub,还)。充分利用上面的答案,我想到了这个:

git merge --no-commit --no-ff @{upstream}
git grep -l '<<<<<<< HEAD' | xargs -I % sh -c "echo -e '\n\e[93m%\n---\e[0m' && cat %"
git merge --abort

对我来说,这是用来检查我的pr的。你可以用任何分支替换@{upstream}。

我希望这对大家有所帮助。

其他回答

我的解决方案是向后归并。

不要将您的分支合并到远程“目标”分支中,而是将该分支合并到您的分支中。

git checkout my-branch
git merge origin/target-branch

你将看到是否有任何冲突,并可以计划如何解决它们。

在这之后,你可以通过git merge—abort终止合并,或者(如果没有任何冲突并且合并已经发生)通过git reset—hard HEAD~1回滚到之前的提交

我猜你只是想知道在真正尝试合并之前你给自己惹了多少麻烦……并且在合并失败后重置到最后一次提交相对容易,所以如果这是预期的方法,我不会感到惊讶。

也就是说,如果你真的不想触及工作树中现有的文件,你可以创建一个补丁并针对目标分支测试它。这还可以显示对哪些文件做了哪些更改-只需在文本编辑器中打开补丁文件。

git checkout -b mycrazybranch
[change some stuff...]
git add .
git commit -m "changed some stuff"
git format-patch master --stdout > crazy.patch
git checkout master
git apply crazy.patch --check
[all good! cleanup...]
rm crazy.patch

如您所见,这将创建一个补丁文件,然后您可以测试它—检查并查看是否有任何错误,然后删除补丁文件。

如前所述,传入——no-commit标志,但为了避免快进提交,也传入——no-ff,如下所示:

$ git merge --no-commit --no-ff $BRANCH

检查阶段性的变化:

$ git diff --cached

你可以撤销合并,即使是快进合并:

$ git merge --abort

我使用git日志来查看从主分支到特性分支上发生了什么变化

git log does_this_branch..contain_this_branch_changes

例如,查看哪些提交在一个已经/没有被合并到master的特性分支中:

git log master..feature_branch

不完全是那样的。但是您可以使用——no-commit选项,这样它就不会在合并后自动提交结果。通过这种方式,您可以检查合并,如果需要的话,还可以在不破坏提交树的情况下撤消合并。