使用git rebase追溯使提交登陆不同的分支?

时间:2011-01-14 22:43:18

标签: git rebase

我有一些提交:

 - 1 - 2 - 3 - 4 - 5 (HEAD, master)

之后我注意到Commits 2& 3真的应该走自己的分支。它们完全独立于提交4和5我可以使用git rebase来制作吗?

 - 1 - 4 - 5 (HEAD, master)
    \
     2 - 3 (TestBranch)

最重要的是,Commit 2Commit 3的SHA1是否会与变基前的SHA1保持一致?

2 个答案:

答案 0 :(得分:9)

首先,请注意您所需的TestBranch仅指向当前提交3;除了git branch TestBranch <commit 3>之外,您无需做任何事情来实现这一目标。请记住,分支只是提交的指针。这应该回答你关于提交2和3的SHA1的问题。你没有改变那些提交,所以它们的SHA1当然是相同的。

要让你当前的分支(主)在你想要的地方(提交1,4,5),你确实会变基。这是一个非常简单的交互模式。首先,运行:

git rebase -i <commit 1> master     # -i is a synonym for --interactive

Git将启动您的编辑器,并向您展示自主分支(2,3,4,5)上的提交1以来的所有提交,以及有关如何操作的一些提示。您只需要删除提交2和3的行,然后保存并退出。然后它会应用剩下的东西(4和5),留下你想要的东西。当然,如果提交4和5依赖于提交2或3,当git尝试在rebase期间应用它们的补丁时,你将会遇到合并冲突。

请注意,此更改提交4和5的SHA1,因为提交的SHA1取决于其父级。这会让那些拉动那个分支的人感到困惑。 (你已被警告过。)你的实际最终结果将更准确地描述如下:

- 1 - 4' - 5' (HEAD, master)
   \
    2 - 3 (TestBranch)

提交4'和5'具有与提交4和5相同的差异,但具有不同的父级,因此它们是不同的提交。

答案 1 :(得分:2)

如果您签出3,则可以在此时创建新的分支TestBranch,并获取所需的分支。

然后,您可以使用master返回分支git rebase -i HEAD~6rebase it interactively,删除23