你想要的命令(可能)是git diff。但是这个问题本身存在一种根本性的错误。 Git 不存储更改,因此任何分支中都没有任何更改。其实branch这个词本身就很滑,最好说说commits。提交不存储更改:提交存储快照(和元数据)。
要比较任意两个快照,可以使用git diff。所以这就是为什么答案是(可能)git diff。但是你接着谈到使用git merge 和/或git rebase,这些要复杂得多。
git fetch 命令将从其他 Git 存储库中获取他们拥有的、你没有的、他们希望你拥有的任何提交。1 所以现在你有了你的提交和他们的提交。
下一个技巧在于 finding 提交。通常,您的提交在 您的分支 中,但这是使用那个滑溜溜的词 branch。为了使这个答案简短,我不打算在这里详细介绍,但是您的存储库中的 分支名称 只是您的 Git 在某些系列中记住 last 提交的方式的提交。您可以——而且几乎总是这样做——在最后一次提交之前进行提交。此外,每个提交都可以在多个分支中,并且通常某人所做的第一个提交是在每个分支中。
在您使用git fetch 获得其他人的 提交后,您的Git 将创建或更新一个远程跟踪名称,例如origin/master。这是您的 Git 记住 他们的 Git 在 他们的 存储库中作为最后一次提交在 他们的 master 上的提交的方式。所以你现在可以运行了:
git diff master origin/master
这将使您的 Git 从 your master 中的最后一次提交中提取快照,然后从 他们的 master 中的最后一次提交中提取快照(如被您的origin/master 记住),然后比较两个快照。然后,git diff 命令为您提供了可以对快照 (master) 中的文件进行哪些更改的秘诀,如果对这些文件进行更改,将生成它们在快照 (origin/master) 中的文件。
你也可以运行:
git rev-parse master
这将向您显示提交的 哈希 ID,该提交是(当前)您自己的 master 中的最新提交,并且:
git rev-parse origin/master
这将向您显示提交的哈希 ID,它是(当前)origin/master 中的最新提交——您对他们 master 的记忆。如果这些哈希 ID 相同,则它们和您拥有或至少拥有相同的上次提交。如果它们不同,则您和他们有不同的提交。2
这些不同的提交是否持有不同的快照是另一个问题(git diff 会回答)。但是,如果您和他们有相同的提交,那么一个特定的提交只有一个快照。所以git diff 不会发现任何差异,因为那个快照和它自己是一样的。
1一般来说,这是“所有提交”,尽管在特定系统中存在特定情况,人们可以根据需要向您隐藏提交。不过,大多数情况下,您不必担心这一点。我只是通过添加关于他们希望你拥有的部分来小心在技术上是正确的。
2而且,您现在可以运行git diff <em>hash-from-master hash-from-origin/master</em>。输出将匹配来自git diff master origin/master 的输出。这两个名称只是让 Git 找到正确哈希 ID 的方法。