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

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


当前回答

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

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

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

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

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

其他回答

Git在合并时引入了——ff-only选项。

来自:http://git-scm.com/docs/git-merge ——ff-only 拒绝合并并以非零状态退出,除非当前HEAD已经是最新的,或者合并可以作为快进解决。

这样做将尝试合并和快进,如果不能,它将中止并提示您不能执行快进,但不影响您的工作分支。如果它可以快进,那么它将在工作分支上执行合并。此选项也可用于git拉取。因此,你可以这样做:

git pull --ff-only origin branchA #See if you can pull down and merge branchA

git merge --ff-only branchA branchB #See if you can merge branchA into branchB

我只需要实现一个自动查找存储库与其远程存储库之间冲突的方法。这个解决方案在内存中进行合并,所以它不会影响索引,也不会影响工作树。我认为这是解决这个问题最安全的方法。下面是它的工作原理:

将远程获取到存储库。例如: Git获取源主机 执行命令git merge-base: git merge-base FETCH_HEAD master 运行git merge-tree: git merge-tree mergebase master FETCH_HEAD (mergebase为上一步打印的merge-base十六进制id)

现在假设您想要合并远程主服务器和本地主服务器,但是您可以使用任何分支。Git合并树将在内存中执行合并,并将结果打印到标准输出。Grep模式<<或>>。或者您可以将输出打印到一个文件中并进行检查。如果你发现一行以“changed in both”开头,那么很可能会有冲突。

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

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

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

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

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

如果你想从B快进到A,那么你必须确保git log B..A没有显示任何东西,也就是说A没有B没有的东西。但即使B. A有一些东西,你仍然可能能够合并而没有冲突,所以上面说明了两件事:将会有一个快进,因此你不会得到冲突。

我做了一个别名来做这件事,就像一个魅力,我这样做:

 git config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '

现在我只需调用

git mergetest <branchname>

看看是否有任何冲突。