假设我有2个分支。我希望一个分支从一个特定的提交开始跟踪另一个分支,以便在跟踪的分支中有新的提交时,旧的提交不会合并到跟踪分支中。跟踪从特定提交开始的git分支
是否有可能在git中做到这一点?我的问题是,我不想在新的分支中有一些旧的提交,但我需要从另一个分支自动提交新的提交,不包括一些旧的提交。
假设我有2个分支。我希望一个分支从一个特定的提交开始跟踪另一个分支,以便在跟踪的分支中有新的提交时,旧的提交不会合并到跟踪分支中。跟踪从特定提交开始的git分支
是否有可能在git中做到这一点?我的问题是,我不想在新的分支中有一些旧的提交,但我需要从另一个分支自动提交新的提交,不包括一些旧的提交。
分支名称只是存储提交ID的记录。
你在这里要求的是将一个特定的提交ID存储在一个名称下,然后再比较其他分支名称的提交ID与保存的提交ID。这正是分支和标签做的:它们是提交ID的名称。
分支名称和标签名之间唯一的区别是分支名旨在将,而事实上自动移动当一个人“的”分支,使提交:
o--o <-- branch1
/
...--o--o--o <-- HEAD -> branch2
^
|
\-------- tag: tagX
这里HEAD
指向branch2
,意思是你在分支branch2
:你最近做了git checkout branch2
。
现在,如果你犯了一个新的提交(让我们记住这一个与*
代替o
),图形变为:
o--o <-- branch1
/
...--o--o--o--* <-- HEAD -> branch2
^
|
\-------- tag: tagX
注意如何标记没有移动。
如果我们使用分支名称而不是标签名称,它仍然不会移动,但。让我们倒退到前新的提交,并得出这样的:
o--o <-- branch1
/
...--o--o--o <-- branchX, HEAD -> branch2
现在我们做出新的承诺。因为我们在分支branch2
和而不是对branchX
,只有branch2
更改。所以我就画这个有点不同只是为了适应分支箭头:
o--o <-- branch1
/
...--o--o--o <-- branchX
\
* <-- HEAD -> branch2
注意,这是完全一样的图与标签 - 我只是拉标签的不同箭头了一下,暗示标签的箭头更接近提交本身(因为标签不应该改变,而分支是应该改变)。
因此,所有你需要做的就是创建一个名称(分支名称或标记名称),指向具体的承诺要记住:
git branch branchX <commit-ID>
或:
git tag tagX <commit-ID>
你应该使用哪个标签或分支?这取决于你是否想要移动它,以及你是否希望别人分享它。标签永远不会移动,并且非常全球化:其他克隆存储库的人可以获得的标签,您的标签。分行是应该移动,不那么全球:谁仓库克隆为其他人得到你的分支,但作为origin/*
的名字,而不是他们分支名称。 (如果你不想要这些名称中的任何一个 - 例如,如果你想让名字不移动,但也不是全局的,例如你可以创建你自己的名字空间,分支和标签是内置的, Git知道如何处理它们,如果你发明了自己的参考名称空间,Git将不知道如何使用它,所以你将不得不做更多的工作。)