【问题标题】:What is git diff origin master supposed to do?git diff origin master 应该做什么?
【发布时间】:2014-04-11 04:24:51
【问题描述】:

我的一个同事从一个git分支跑了

git diff origin master

它应该做什么? origin分别指向什么?

这是相关的,但未包含在 In Git, what is the difference between origin/master vs origin master?

【问题讨论】:

    标签: git diff


    【解决方案1】:

    相当于

    git diff origin/HEAD master
    

    【讨论】:

      【解决方案2】:

      git diff 的这种形式只需要两个修订说明符,如 gitrevisions 中所述。

      在这种情况下,origin 最有可能匹配第 6 项:

      1. 否则,refs/remotes/<refname>/HEAD 如果存在。

      所以这与git diff origin/HEAD master 的含义相同:将origin/HEAD 解析为commit-ID,将master 解析为commit-ID,然后区分两个提交。

      运行:

      git rev-parse origin
      

      看看分辨率是如何工作的。

      【讨论】:

      • 在这个命令之前fetch是强制性的吗?还是它已经进入远程存储库并检查......?
      • @RoyiNamir:你不是要求首先运行git fetch,但如果你不这样做,你的Git正在使用从last fetch(或者可能由以前的 git push 更新)。如果你认为自从你的 Git 上次与远程对话以来,新的提交可能已经出现在远程,并且你想查看这些提交,现在运行 git fetch 让你的 Git 现在与他们的对话。然后,任何时候,使用origin/<name> 来引用这个最新的git fetch 保存的信息。
      • 也就是说,在远程端检查是否有新版本最快的方法是什么?然后必须进行提取......对吗?
      • @RoyiNamir:是的,您必须联系其他 Git,而git fetch 可能是最简单、最简单的方法。您可以使用git ls-remote 来完成获取的第一步(获取名称和哈希 ID),但如果他们确实有新的提交,那么您可能无论如何都想要新的提交。请注意,当您从他们那里得到答案时,您的答案可能已经过时了:例如,假设数据包需要 2 秒才能到达您的机器,所以您获取并且他们说他们的 master 是 a123456。该信息至少存在两秒钟:有人可能在一秒钟前进行了推送!
      • 所有这一切的结果是,首先做一个git fetch 是明智的,但不要指望你的信息是最新的,不管你是多久获得的,除非你有更大的周边协议。这是任何分布式系统中的一个基本问题:您在本地拥有的信息可能与他们(无论他们是谁)在本地拥有的信息不匹配。您必须以其他方式构建原子性,例如,使用比较和交换请求(“我认为您认为 A=3,如果是这样设置 A=4,无论如何,让我知道您做了什么”)或租约( “告诉我 A,30 秒内不要更改它”)。
      【解决方案3】:

      这取决于...如果originmaster 是分支,它显示了它们之间的区别。查看解释时,他们通常使用origin 代表原始(上游、官方等)分支,master 代表您正在处理的分支。即,“告诉我与原始版本相比发生了什么变化。”

      【讨论】:

        【解决方案4】:

        它显示了 origin/HEAD 的提示和 master 分支之间的变化。 您可以使用以下命令实现相同的目的:

        • git diff origin/HEAD master
        • git diff origin/HEAD..master

        通常 origin 指向您克隆存储库的源。

        【讨论】:

          【解决方案5】:

          “origin”指向“远程”,通常是您克隆存储库的位置, 见

          $ git remote -v show
          

          但特别是在回答您的问题时,“git diff origin master”是等效的。对此:

          $ git diff origin/HEAD master 
          

          origin/HEAD 指向遥控器上 HEAD 引用指向的分支。上次拉取时哪个是签出的分支。

          看看你的提交图,它会告诉你所有引用在哪里(--decorate)

          $ git log --oneline --graph --all --decorate
          

          【讨论】:

            猜你喜欢
            • 2011-08-07
            • 2013-08-10
            • 2012-09-09
            • 2011-04-04
            • 1970-01-01
            • 1970-01-01
            • 2020-07-27
            • 2012-09-21
            • 2011-07-13
            相关资源
            最近更新 更多