当我还没推动时,如何对旧提交进行小修复?

时间:2017-10-26 06:51:58

标签: git

例如,我添加了一个.gitignore文件。之后我做了一些工作,但现在意识到我应该再添加一个我应该忽略的文件夹。

mybranch HEAD 1: Much work 2: Much work 3: Add .gitignore origin/master 4: Others have this

我不想做一个新的提交,说“编辑.gitignore”,而是回去修复它。由于我没有将我的提交推送给其他人,但我想尽可能地整理我的提交。

我想我可能要检查一下提交并修改它。那么我该如何重复新的提交呢?一个接一个地进行合并到最后一点会让我最终进入一个新的分支。我想最终成为起点减去小变化。

2 个答案:

答案 0 :(得分:2)

您可能希望使用rebase并将提交压缩成一个。

假设您想将最后两次提交压缩为一次提交:

$ git rebase -i HEAD~3

现在你应该有:

pick ccccccc third commit
pick bbbbbbb second commit
pick aaaaaaa first commit

# Rebase ...... onto ......
#
# 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
#
# 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.
#
# Note that empty commits are commented out

pick替换为squash(或简称为s),无论您想要压缩到哪一个提交。

有关详细说明,请浏览上面发布的链接。

答案 1 :(得分:1)

您可以做的是引入一个新的提交,更改为.gitignore,然后将其移动并压缩到旧提交中。

新提交后你将拥有

HEAD 1: .gitignore edit
2: Much work
3: Much work
4: Add .gitignore
...

然后,如果您运行git rebase -i HEAD~4,您将在编辑器中看到提交,并且必须选择要保留的提交。 您可以在[4]之后将新[1]移到右侧,并将其设置为squash而不是pick,这会使其“融入先前的提交”。

您可以详细了解此流程here