我有一些提交:
- 1 - 2 - 3 - 4 - 5 (HEAD, master)
之后我注意到Commits 2& 3真的应该走自己的分支。它们完全独立于提交4和5我可以使用git rebase
来制作吗?
- 1 - 4 - 5 (HEAD, master)
\
2 - 3 (TestBranch)
最重要的是,Commit 2
和Commit 3
的SHA1是否会与变基前的SHA1保持一致?
答案 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~6
和rebase it interactively,删除2
和3
。