假设我有2个分支。我希望一个分支从特定提交开始跟踪另一个分支,这样当正在跟踪的分支中有新的提交时,旧的提交不会合并到跟踪分支中。
是否可以在git中执行此操作?我的问题是我不想在新的分支中进行一些旧的提交,但我需要从另一个分支自动获得新的提交,不包括一些旧的提交。
答案 0 :(得分:0)
分支名称只是存储提交ID的记录。
您要求的是在名称下存储特定的提交ID,然后将其他分支 name 的提交ID与保存的提交ID进行比较。这正是分支和标记所做的:它们是提交ID的名称。
分支名称和标记名称之间唯一真正的区别是分支名称旨在移动,实际上自动移动当一个是#34时;关于"那个分支并提交:
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
请注意,这与图形完全相同,而标记 - 我只是略微不同地标记了标记的箭头,暗示标记的标记是arrow更靠近提交本身(因为标签永远不会改变,而分支 应该改变)。
因此,您需要在此处创建一个名称(分支名称或标记名称),指向您要记住的特定提交:
git branch branchX <commit-ID>
或:
git tag tagX <commit-ID>
您应该使用,标记或分支?这取决于您是否想要移动它,以及您是否希望其他人共享它。标签永远不应该移动,并且非常全球化:克隆存储库的其他人可以获取他们的标签,您的标签。分支 应该移动,并且不是那么全局:克隆存储库的其他人获取分支,但是作为origin/*
名称,而不是他们的分支名称
(如果您不想要其中任何一个 - 例如,如果您希望名称不移动,但也不想是全局名称 - 您可以创建自己的名称空间。内置分支和标签,Git知道如何处理它们。如果你发明了自己的引用名称空间,Git不知道如何使用它,所以你将不得不做更多的工作。)