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

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


当前回答

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

git log does_this_branch..contain_this_branch_changes

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

git log master..feature_branch

其他回答

如前所述,传入——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

用git撤销合并是如此简单,你甚至不应该担心演练:

$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world

编辑:正如下面的评论中所指出的,如果你在你的工作目录或暂存区域中有更改,你可能想要在执行上述操作之前隐藏它们(否则它们将在上面的git重置后消失)

这可能很有趣:从文档中:

如果您尝试合并,导致复杂的冲突,并希望 重新开始,你可以用git merge -abort恢复。

但你也可以用幼稚(但缓慢)的方式来做:

rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)

(注意:仅仅克隆到/tmp不能工作,你需要一个副本,以确保未提交的更改不会冲突)。

我只想看到冲突(不能看到他们与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}。

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