嗨我有两个分支并行开发' dev'和' prod'我想在本地开发分支中添加另一个本地分支,名为' issue22' (GitPro将此称为主题分支 - 其他人称之为功能分支。所以在终端我用
创建了我的功能/主题分支git checkout -b issue22 dev
我以为会做一个名为issue22'并从dev分支中的相同源代码开始。我期待看到
prod
dev
dev/issue22
但是当我发送命令时 git branch -a
相反,我看到了
prod
dev
issue22
remotes/origin/head -> origin/master
remotes/origin/dev
remotes/origin/prod
我应该使用什么命令来创建一个新的分支,以便发布22'看起来像一个主题/功能分支,与' dev'并行运行。分支也似乎源于开发分支?
非常感谢答案 0 :(得分:3)
提交之间的父母关系是为存储库提供“结构”的原因。使用Git绝对可以实现像displayed on the Git Flow website那样的可视化。它的设计是围绕 Git!
以下是一个可以帮助您入门的示例:
首先,创建一个新的存储库并添加一个空提交:
$ mkdir test-repo && cd test-repo
$ git init
$ git commit --allow-empty -m "Initial empty commit"
此时你有一个分支和一个提交。您的网络看起来像
[master] A
此处,A
代表Git-Flow网站最右上角的蓝点。
此提交缺少图表中的标记。让我们添加它:
$ git tag -a 0.1
现在我们已经
了[master] [0.1] A
现在我们将创建develop
分支:
$ git checkout -b develop
此时,我们尚未向develop
中的master
添加任何提交,因此分支指向完全相同提交:
[master] [develop] [0.1] A
这里有点拥挤。让我们再添加几个提交到develop
:
$ # Hack, hack, hack...
$ git add somefile.txt otherfile.dat
$ git commit
$ # Hack, hack, hack...
$ git add foo.bar
$ git commit
现在我们的网络更有趣了。当我们创建这两个新提交中的每一个时,我们的develop
分支被更新为依次指向它们中的每一个。现在我们有了
[master] [0.1] A
\
[develop] B---C
develop
实际上指向此时提交C
,我们可以将C
的祖先追溯到提交A
。
我们可以使用新的分支issue22
执行相同的操作,但除非我们明确地将其命名为develop/issue22
,否则它不会被命名为$ git checkout -b issue22
$ # Hack, hack, hack...
$ git add foo.bar
$ git commit
:
[master] [0.1] A
\
[develop] B---C
\
[issue22] D
现在我们已经
了issue22
由于develop
的父级为D
, C
分支develop
。我们可以对issue22
和[master] [0.1] A
\
[develop] B---C---F---G
\
[issue22] D---E---H
issue22
不改变这种关系。然后我们可以将develop
合并回master
(或直接合并到[master] [0.1] A
\
[develop] B---C---F---G---I
\ /
[issue22] D---E---H
,但这不是“Git-FLow方式”)并得到类似
{{1}}
此模型可以扩展到您想要的任意数量的分支,并且可以稍加注意,您可以完全重现Git-Flow图。分支不会“分歧”,直到它们包含不同的提交。
了解一下Git的内部工作原理可能会有所帮助。网站Think like (a) Git是一个非常好的介绍。