Git pull:确定哪个分支包含更新

Git pull: Determining what branch contains updates

我们看到这在 git 拉动分支 myfeature git 报告:

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

Why do you see Total 78 (delta 36) but then see only 9 files changed? What does the total/delta represent?

Delta是压缩保存的KiB中的space;我不确定总数,但这可能是未压缩的更改大小。

How can you determine which of the two branches (myfeature or master) contained these 78 (or 9) changes?

完全没有。 git 不是这样的。 myfeature 和 master 可以完全相同,也可以完全不相交。你看到的是变化的数量——这对你当地的状态有何影响,在另一张纸上 sheet。

一般来说,如果您在分支 "A" 中进行拉动,您 只会 通过合并到您之前或隐式指定的分支来更改该分支拉的时候。当你检查分支 "B" 并且有变化时,git 会告诉你类似

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

总数、delta 行中的数字是 git 个对象,在 this answer

中讨论得相当透彻

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

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

eb0523c..a796ad2  myfeature     -> origin/myfeature

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

git diff --stat 63c5668 a11d406

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

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.

In addition why does git indicate Total 78 (delta 36) but then see only 9 files changed?

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