解压缩先前压缩的提交

时间:2017-09-06 16:16:50

标签: git

我已经使用了压缩提交 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.
#

所以我不明白如何表示提交分裂

2 个答案:

答案 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)

您需要执行某些步骤

  1. 检查Reflog

    git reflog
    
  2. 它会显示输出

    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
    
    1. 重置rebase操作。 (重置为第一个rebase操作之前的提交)

      git reset --hard your-picked-sha-value
      

      git reset --hard HEAD@{pickedValue}
      
    2. 再次重新启动

      git rebase -i HEAD~5