暂时从git master分支中删除代码

时间:2011-10-24 11:57:01

标签: git branching-and-merging

我有一个在git中跟踪的项目,它有一个主分支,成为我的代码的发行版。我在该分支中有一些代码导致问题,因为它依赖的外部库目前已被破坏。但是,我希望外部库将在未来的某个时刻“修复”(几周,因此存储不是我想要的),并且我想要复活有问题的代码。

所以,问题是:

如何从分支机构保存代码以备将来使用?如果我只是创建一个名为saveme的分支,在主分支上进行更改,然后尝试将saveme合并回master,以获取“已保存”的代码,这似乎导致“已经是最新的”。

1 个答案:

答案 0 :(得分:2)

创建saveme分支时,您的历史记录如下所示:

 A -- B -- C (saveme,master)

....然后当您在master上工作更多时,为了应对破坏的图书馆,您的历史记录如下:

 A -- B -- C (saveme) -- D -- E (master)

因此,如果您尝试将saveme合并到master,则会显示“已经是最新的”,因为saveme的完整历史记录已包含在master中}。听起来好像你想要的是然后创建一个与saveme具有完全相同的树的提交,但它只是master之上的另一个提交。您可以使用git revert进行提交E然后使用D来执行此操作,但如果您想一次性执行此操作,则可以执行以下操作:

# Check that "git status" is clean:
git status

# Set the index (staging area) to be as it was at the tip of the branch saveme:
git read-tree saveme

# Create a commit based on that index:
git commit -m "Going back to the state of the branch 'saveme'"

# Your working tree will still be as it was when you started, so
# you'll want to reset that to the new commit:
git reset --hard

(这是我在this answer中建议的食谱的一个微不足道的变体。)然后你的历史将如下:

 A -- B -- C (saveme) -- D -- E -- F (master)

...但提交F树将与提交C的树相同。