我已经使用了压缩提交 git rebase -i HEAD~5 在这个操作之后,我注意到其中一个必须分开。 我尝试使用本手册中的交互模式 https://git-scm.com/docs/git-rebase#_splitting_commits
git rebase --interactive
但只有
noop
# Rebase 0349ada..0349ada onto 0349ada (1 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
所以我不明白如何表示提交分裂
答案 0 :(得分:3)
您有两种选择。
您可以将要选择的提交设置为edit
,然后在此处进行更改。通常,您在提交之前重置为,然后进行所需的两次提交:
$ git reset HEAD^
$ git add file1 file2 file3
$ git commit
$ git add file4 file5 file6
$ git commit
$ git rebase --continue
当然,现实世界的示例不太可能是对单独文件进行编辑的提交,但是在您完成git reset
之后,您就会在提交之前将其拆分,但使用工作目录中该提交的更改。你需要做什么才能完成你想要的两次提交取决于你的情况。
另一种选择,就是回到你的第一次反叛之前,再做一次,注意不要犯同样的错误。在rebase之前的提交不会立即被垃圾收集,因此您可以简单地重置为相关提交:
git reset --hard <hash of the HEAD commit before the rebase>
我简单地说,但是我意识到在你做rebase之前你不太可能记下提交哈希。不过不用担心,你可以用reflog发现它:
git reflog
这列出了在执行的每个操作中哪个提交是HEAD。你应该看到一堆标记为rebase -i
的提交,在提交之前从提交中选择提交哈希。
然后你可以再次做你原来的rebase,做出不同的选择。
答案 1 :(得分:1)
您需要执行某些步骤
检查Reflog
git reflog
它会显示输出
some-sha HEAD@{4}: some message
some-sha HEAD@{5}: another message
some-sha HEAD@{6}: rebase -i (squash): Last commit message (after the temporary commit)
some-sha HEAD@{7}: rebase -i (squash): updating HEAD
some-sha HEAD@{8}: checkout: message some-sha
重置rebase操作。 (重置为第一个rebase操作之前的提交)
git reset --hard your-picked-sha-value
或
git reset --hard HEAD@{pickedValue}
再次重新启动
git rebase -i HEAD~5