如果他们在Git中指向相同的提交,那么在基于分支foo或bar创建分支之间是否存在任何差异?

nop*_*ole 8 git

比方说,如果从master分支机构,我们创建一个foo分支和一个bar分支.

git checkout -b foo master
git checkout -b bar master
Run Code Online (Sandbox Code Playgroud)

现在让我们说,如果我们创建一个分支wah基础上foo,barmaster:

git checkout -b wah foo
Run Code Online (Sandbox Code Playgroud)

要么

git checkout -b wah bar
Run Code Online (Sandbox Code Playgroud)

要么

git checkout -b wah master
Run Code Online (Sandbox Code Playgroud)

然后在那里是否有任何的不同wah是基于foo,barmaster?有没有可以告诉它是基于任何Git命令foo,barmaster

小智 6

没有区别.分支只是指向提交的引用.我没有检查源代码,但我认为假设每次创建分支时引用最终都会被解引用到提交对象中,这是公平的.

因此,当你这样做

git branch foo master
git branch bar master
Run Code Online (Sandbox Code Playgroud)

branches foo,barmasterall引用同一个commit对象.

因此,以下内容也是等效的,因为wah最终也会引用相同的提交对象:

git branch wah master
git branch wah foo
git branch wah bar
Run Code Online (Sandbox Code Playgroud)

验证分支引用只是提交标签

您可以通过简单地获取每个分支的第一个日志条目来轻松验证这一点(请注意每个分支的提交sha ID):

git log --pretty=oneline -1 master
952e133ff1d1616f068ca524af9f323f6e7f8b7a Add Bash alias for `pbcopy` (OS X)
Run Code Online (Sandbox Code Playgroud)

另一种验证方法是查看参考文件本身.每个都将包含一行,其中包含他们当前引用的提交sha:

cat .git/refs/heads/master
952e133ff1d1616f068ca524af9f323f6e7f8b7a

cat .git/refs/heads/foo
952e133ff1d1616f068ca524af9f323f6e7f8b7a
Run Code Online (Sandbox Code Playgroud)

补充阅读