【问题标题】:Git how do I check if there are any changes in another branchGit如何检查另一个分支中是否有任何更改
【发布时间】:2021-05-14 15:09:34
【问题描述】:

在 git 中,我如何检查另一个分支(针对当前分支)是否有任何更改? git fetch origin 将显示对远程当前分支的任何更改。有没有办法从另一个分支获取相同的? git merge origin/mastergit rebase origin/master 将直接从另一个分支合并,如果我没记错的话。

编辑:

我的情况和this很相似。只是我想在推送功能分支更改之前“检查”是否需要合并来自主分支的任何更改。

【问题讨论】:

  • git diff branch1..branch2?

标签: git github command


【解决方案1】:

你想要的命令(可能)是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 的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多