git从上次合并中获取冲突而不再次运行合并

时间:2012-06-15 09:33:25

标签: git merge

我合并了两个分支机构。有很多冲突。解决了所有问题。现在我不确定,也许我在冲突解决期间犯了错误。而且我没有看到没有其他方法可以检查是否为真 - 只需再次运行合并,并逐个检查冲突。

这意味着我需要再创建一个分支来存储合并的结果,对吗?

我可以避免吗?也许有可能从git中的某个位置获取所有这些<<<<<<======>>>>>>的所有冲突文件,而不再次运行合并?

2 个答案:

答案 0 :(得分:4)

如果你想看看合并你能做什么

git show <hash-of-merge-commit>

如果你想重做整个合并,你可以

git checkout <branch-that-you-merged-to>
git reset --hard <hash-of-the-commit-just-before-the-merge>
git merge <branch-that-you-merged-in>

如果你想重做合并,然后将第二次合并与第一次合并比较(考虑是否更好),你可以这样做:

git checkout <branch-that-you-merged-to>
git rev-parse HEAD

这为您提供了当前提交的哈希值。记下来。然后做

git reset --hard <hash-of-the-commit-just-before-the-merge>
git merge <branch-that-you-merged-in>

完成合并,然后执行此操作以比较合并

git difftool <hash-of-commit-noted-above>

如果您认为原始合并更好,您可以

git reset --hard <hash-of-commit-noted-above>

答案 1 :(得分:2)

是的,这是微不足道的。首先,您需要使用git log找到合并提交的sha1 id。当你做下一个:

git checkout <sha1>^1
git merge <sha1>^2

你将处于无头状态。 ^n表示提交的第n个父级。因此,不会创建任何分支。您可以更仔细地再次解决冲突,然后

git diff HEAD..<sha1>

查看冲突解决方案是否存在任何差异。

顺便说一下,在一个git中只是一个人类友好的名字,用于提交的sha1,所以不要害怕创建它们。

PS:如果你在Windows中工作,命令行中的^符号是特殊的,你需要加倍它或引用命令行参数。