如果我做
$ git branch a
$ git checkout a
Switched to branch 'a'
$ git branch b
$ git checkout b
Switched to branch 'b'
$ git branch c1
$ git branch c2
Run Code Online (Sandbox Code Playgroud)
这些分支之间是否有任何关系,或者是否所有被认为是"扁平"的,因为它们中没有任何提交?在SVN中,我会像这样建模这些分支:
master
|
+-a
|
+-b
|
+-c1
|
+-c2
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试按照这个问题做的时候gitk master a b c1 c2
,我得到一条扁平线,而不是我上面的图表.
Chr*_*rle 12
git没有严格的父分支,它只有一个特定的提交路径.在这种情况下,它们都具有与起点相同的提交,因此它们都是相同的.一旦他们开始自己的提交,他们将成为他们自己的"线",但他们不会真正有彼此的关系.
在任何时候你都可以轻松地使用任何分支合并git merge
,所以"父"关系并不是那么重要.对于使用的情况--track
(你收到父母提交的地方),Git确实有父母的概念,但这只是一个特殊的便利功能.你可以轻松拥有任意数量的"父母",如果你点你的我的,穿过你的T的(git merge branch A
,git merge branch B
,等).
对我来说,将分支视为指针是有帮助的。您从一个名为 master 的指针开始,该指针指向一个特定的提交。创建分支时,您只是在创建另一个指向同一提交的指针。所以你上面的命令集会产生 5 个指针(master、a、b、c1、c2),它们都指向同一个提交。