@
RedBeanIce 因为 master 和迭代主分支可能共享同一个 commit 。这种时候从哪个分支拉都是一样的结果。
你可以认为分支是一个特殊的 TAG (实际上分支和 tag 在 git 底层是 reference ),他们只是标识一个 commit 。注意,这里是一个。
当你在 master 分支做一次提交后,git 会根据当前 master 这个 ref 找到 commit id ,将新 commit 的 parent 设置为这个 commit 。然后移动 master 这个 reference 到新 commit 。
从 git 角度来讲,分支只是标识一个 commit 而已,并不记录其它信息。真正有前后关联关系的是 commit 自己。
你甚至可以直接用 git reset --hard 去强行移动一个分支到任意一个 commit 。
所以如果你的仓库有这些 commit:
```
a->b->c
\ \->d
\-e
```
假设 master 分支指向 a ,迭代主分支指向 b ,开发分支分别指向 c 、d 、e 。此时,你想知道”c 是从 a 拉的,还是从 b 拉的“,这个问题是无解的。
因为开发分支 c 可以是从 a 拉的,但提交了 b 、c 两个 commit 。也可以是 b 这个 commit 已经存在,然后开发分支 c 只提交了 c 这个 commit 。
这两种情况在 git 记录里是一模一样的,无法区分的。