git中的分支是否会创建父子关系?

rip*_*234 12 git git-branch

如果我做

$ 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,等).


Chr*_*fer 5

对我来说,将分支视为指针是有帮助的。您从一个名为 master 的指针开始,该指针指向一个特定的提交。创建分支时,您只是在创建另一个指向同一提交的指针。所以你上面的命令集会产生 5 个指针(master、a、b、c1、c2),它们都指向同一个提交。