【问题标题】:Git pull: Determining what branch contains updatesGit pull:确定哪个分支包含更新
【发布时间】:2015-09-23 16:08:56
【问题描述】:

我们看到这是在分支myfeature git 上执行 git pull 报告:

remote: Counting objects: 78, done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 78 (delta 36), reused 0 (delta 0)
Unpacking objects: 100% (78/78), done.
From ssh://stash.xeon.net:7999/core/myproject
   eb0523c..a796ad2  myfeature     -> origin/myfeature
   63c5668..a11d406  master     -> origin/master
 * [new tag]         myproject-7.9.0.13 -> myproject-7.9.0.13
 * [new tag]         myproject-8.0.0.0 -> myproject-8.0.0.0
Updating eb0523c..a796ad2
Fast-forward
 xxxmyproject/pom.xml       | 2 +-
 app/pom.xml          | 2 +-
 database/pom.xml     | 2 +-
 distribution/pom.xml | 2 +-
 env/pom.xml          | 2 +-
 pom.xml              | 2 +-
 server/pom.xml       | 2 +-
 web/pom.xml          | 2 +-
 xsd/pom.xml          | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)

您如何确定两个分支(myfeature 或 master)中的哪一个包含这 78 个(或 9 个)更改?

另外为什么git显示Total 78 (delta 36)却只看到9 files changed

【问题讨论】:

    标签: git git-pull


    【解决方案1】:
    remote: Counting objects: 78, done.
    remote: Compressing objects: 100% (74/74), done.
    remote: Total 78 (delta 36), reused 0 (delta 0)
    Unpacking objects: 100% (78/78), done.
    From ssh://stash.xeon.net:7999/core/myproject
       eb0523c..a796ad2  myfeature     -> origin/myfeature
       63c5668..a11d406  master     -> origin/master
     * [new tag]         myproject-7.9.0.13 -> myproject-7.9.0.13
     * [new tag]         myproject-8.0.0.0 -> myproject-8.0.0.0
    

    这部分输出涉及整个存储库,而不是任何一个分支。

    git pull 确实是一个方便的命令,相当于运行git fetch,然后将当前分支快速转发到其远程上游(如果有的话)。上面引用的输出来自git fetch

    另外为什么git显示Total 78 (delta 36)却只看到9 files changed

    正如我在上面所写的,前一个数字涉及从远程存储库中获取更改的结果(通常有一个,默认命名为 origin)。这个数字实际上是指 git 对象的数量,即驻留在.git/objects 中的文件。 9 files changed 关注当前分支的快进(myfeature)。

    【讨论】:

      【解决方案2】:

      在您的拉取日志中,您会从 63c5668..a11d406 获得 master 的更新和 myfeature eb0523c..a796ad2 的更新,例如,您可以通过 diff --stat 查看从 63c5668 到 a11d406 的变化

      git diff --stat 63c5668 a11d406
      

      并确定该拉动在哪个分支中更改了哪些文件。

      【讨论】:

        【解决方案3】:

        总数,增量行中的数字是 git 对象,在 this answer 中进行了相当彻底的讨论

        至于哪个分支更新了 9 个文件,您将 origin myfeature 拉到您的本地功能分支,因为那是活动分支。

        Updating eb0523c..a796ad2 向您显示正在移动的提交 shas,您会注意到这些与 myfeature 行中列出的相同 shas:

        eb0523c..a796ad2  myfeature     -> origin/myfeature
        

        【讨论】:

          【解决方案4】:

          为什么您看到总共 78 个(增量 36)但只看到更改了 9 个文件?总计/增量代表什么?

          Delta 是以 KiB 为单位通过压缩节省的空间;我不能完全确定,但这可能是未压缩的更改大小。

          您如何确定两个分支(myfeature 或 master)中的哪一个包含这 78 个(或 9 个)更改?

          一点也不。这不是 git 的工作方式。 myfeature 和 master 可能完全相同,也可能完全不相交。您所看到的是变化的数量 - 对您当地状态的影响在另一张纸上。

          一般来说,如果您在分支“A”中进行拉动,您将通过合并您在拉动时指定或隐含指定的分支来更改该分支。当您结帐分支“B”并且发生更改时,git 会告诉您类似

          Local branch B 91 commits behind remote origin. Use git pull to update.
          

          【讨论】:

            猜你喜欢
            • 2021-09-02
            • 2015-04-04
            • 2016-03-30
            • 2013-03-05
            • 2017-11-26
            • 1970-01-01
            • 2017-12-26
            • 2020-02-27
            • 2012-12-03
            相关资源
            最近更新 更多