从特定提交

时间:2016-09-29 15:43:37

标签: git version-control branch commit

假设我有2个分支。我希望一个分支从特定提交开始跟踪另一个分支,这样当正在跟踪的分支中有新的提交时,旧的提交不会合并到跟踪分支中。

是否可以在git中执行此操作?我的问题是我不想在新的分支中进行一些旧的提交,但我需要从另一个分支自动获得新的提交,不包括一些旧的提交。

1 个答案:

答案 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不知道如何使用它,所以你将不得不做更多的工作。)