两个GIT历史之间的真正差异(或SHA哈希/提交)

时间:2013-04-10 14:22:12

标签: git version-control versioning

我拉了并合并了代码。

我希望看到将应用于代码的更改。

不幸的是,以下所有内容都显示了其他开发人员执行的更改(这些更改已在前一段时间内完成)

git diff origin/ContactList...ContactList
git diff origin/ContactList..ContactList
git diff origin/ContactList...HEAD
git diff origin/ContactList..HEAD

换句话说,我克隆了回购。我在开发过程中已经拉了(我确实希望是最新的)。现在,我只希望看到我的更改。

P.S。:我没有创建另一个分支

1 个答案:

答案 0 :(得分:3)

git diff向您显示您要求它显示的内容,即您提供的两个提交之间的差异。

要了解如何查看“仅自己的更改”,您必须了解合并历史记录中上游更改的位置。在以某些图形表示形式查看历史记录时,可以轻松完成此操作。使用gitkgit log --graph --oneline --decorate或您喜欢的其他历史浏览器。

假设你有一个“简单”的情况,其中两个平行的开发线(你的和上游)合并,你的历史将看起来像这样:

... <- A <- B <- U1 <- U2 <- ... <- Un <-+- C <-- D <-- ....
            ^                            |
            `--- Y1 <- Y2 <- ... <- Ym <-' 

在此表示中,箭头从子提交到他们的父母,因此在左侧是较旧的提交,在右侧是较新的提交。 (你的分支小贴士在C的右边)。 U*提交表示上游更改,Y*提交您自己的更改,但这不是很相关。

用于这些提交的名称是象征性的;当你在repo中实际调用diff时,你需要使用实际的ref名称(标签或分支,如果它们存在于正确的位置,或者提交SHA,否则)。

要查看合并的您自己的部分所发生的所有累积更改(Y*提交),您可以使用

git diff B Ym

即合并基础(最后一次提交)与合并之前的最新提交之间的差异

您尝试它的方式包括实际的合并提交(在此示例中为C),其中已包含所有上游更改,因为此时合并已经发生(这是字面意思)合并提交的要点)。

合并之前某处的diff和它之后的某个地方(包括合并提交)将包含合并两边的所有更改。