我想要分离我的git仓库中的第一个提交,但是我不能使用rebase来完成这个操作,因为它需要指定一个父节点。我发现在Git中编辑根提交对修改第一个提交很有用,但不适用于分离它。我该怎么做?
我想要分离我的git仓库中的第一个提交,但是我不能使用rebase来完成这个操作,因为它需要指定一个父节点。我发现在Git中编辑根提交对修改第一个提交很有用,但不适用于分离它。我该怎么做?
git commit --amend
命令修改原始提交,然后使用git commit
命令在继续重定位操作之前创建一个额外的提交。git rm --cached
命令删除你想要在第二次提交中添加的文件,在初始的git commit --amend
之前编辑任何你希望看起来不同的文件,并在这些文件上调用git add
,再一次在调用git commit --amend
之前。git commit --amend
之后,为了确保你提交了与原始根提交完全相同的状态,你可以调用以下命令:git checkout <sha1-of-original-root> -- .
在调用 git commit
以创建分割根提交的第二次提交之前。
git reset --hard
。你可以使用 git reset <原始根的sha1值> -- .
,但这只会“恢复”索引而不是工作树。最好的方法可能是 git checkout <原始根的sha1值> -- .
,它将更新索引和工作树,但不会改变 HEAD(让你准备提交拆分的第二部分(原始根)提交)。这里的主要思想是,reset 和 checkout 都会改变 HEAD,除非你给它们一个路径参数。 - Chris Johnsen--hard
,但实际上并没有写出来。检出解决方案更好。 - CB Baileygit checkout <sha1-of-original-root> -- .
将它们恢复回来。事先记下原始根提交的哈希值是值得注意的,以便随时掌握。 - mdcq--root
选项告诉rebase
您想要重写根/第一个提交:$ git rebase --interactive --root
然后根提交将出现在变基待办事项列表中,您可以选择编辑它:
edit <root commit sha> <original message>
pick <other commit sha> <message>
...
--root
的解释,来自Git rebase文档:<branch>
到达的提交记录,而不是仅限于一个<upstream>
。这允许您在分支上重新设置根提交记录。
git rebase --root -i
,在根提交之前添加一个b
或break
行,并使用s
/skip
标记根提交。这样,重定位会在任何提交之前停止,您可以使用get checkout <root hash> -- .
从根提交获取代码,并像通常一样进行拆分。 - bogdanb