如何识别分支和主服务器之间的差异到合并的位置?

时间:2018-02-02 12:54:32

标签: git

我有一个分支,x,并希望恢复在此分支中已修改的所有文件,因此我研究git diff branch...master,应该解决问题,但我怀疑这个命令是否会返回从创建分支的提交到合并的提交限制的差异,或者如果它将构成master的最后一个版本,我只想知道从创建分支修改的文件,直到合并之前的最后一次提交。

我需要在红色标记的提交中修改文件(添加和修改的文件):

modified files in commits marked in red

3 个答案:

答案 0 :(得分:2)

由于git历史的便利属性,给出了以下图表:

enter image description here

没有冲突

  • diff(a, i) == diff(e, j)
  • diff(a, e) == diff(i, j)

您可以将合并提交与其父级进行比较并获取相同的信息,它将包括为解决合并冲突而进行的任何更改。

git diff M M^1

假设您将分支合并为主分支(而不是相反,然后是快进,在这种情况下它将是M ^ 2)。

History

答案 1 :(得分:1)

简单地将master分支重置为合并前的状态将是一个更简单的解决方案。只需在合并之前找到主分支的提交ID。

git checkout master
git log # or gitk
# identify the commit id before the merge
git reset --hard <pre_merge_commit_id>

您可以考虑首先在master分叉的临时分支上测试命令,以避免任何“误导”。

答案 2 :(得分:1)

git merge-base master branch为您提供合并的共同祖先。不是创建分支的点(git不保留该信息),但通常它是一个很好的近似值。

然后从分支提交到分支的尖端执行git diff

git diff $(git merge-base master branch)..branch