最简单的方法来摆脱git中的提交?

时间:2016-01-06 10:42:47

标签: git git-rebase

我正在尝试使用git rebase -i,这只是令人困惑......我想要做的是保留当前提交的确切内容,我只是想将历史显示为直接后代以前的提交。说我有这些提交,我在早上开始做某事,然后在午餐前做了一个提交,并在下午完成了所以我想完成它,但我不想看到我在午餐时吃的提交(这是非常简化的,我可能会提交并分支以快速尝试其他内容,但总是意味着将更改重新引入我的分支,如果它成功了):

dbd2032 Add default config file
   |
033fca5 ... break for lunch
   |
05c4e48 Use config file

所以我做了一个git rebase -i HEAD~2,然后回到祖父母05c4e48并给我编辑:

pick 033fca5 ... break for lunch
pick dbd2032 Add default config file

我对此毫不直观地改变了:

pick 033fca5 ... break for lunch
squash dbd2032 Add default config file

这很有效,git用旧的'... break for lunch'消息打开我的编辑器,然后我必须将其更改为'添加默认配置文件'。完成后我最终得到一个新日志,git diff dbd2032显示没有差异:

35a5eec Add default config file
   |
05c4e48 Use config file

这对我来说是违反直觉的,因为我实际上并没有选择 033fca5,我特意从历史记录中删除了该提交。如果我删除该行,但我没有得到该提交中引入的更改。 Git必须在整个过程中进行文件差异才能找到更改......特别是我选择提交dbd2032所代表的确切树。

我正在做什么的快捷方式?我有确切的内容和提交我想要的信息,我只想把它显示为祖父母(或其他后代)的孩子。

1 个答案:

答案 0 :(得分:3)

有两种可能的情况:您在午餐后完成工作,并且您希望将更改修改为最后一次提交,并重新提交提交,然后使用:

git commit --amend

假设您的消息没问题,并且您只想添加一些更改,那么您可以使用--no-edit选项:

git commit --amend --no-edit
通过这种方式,之后永远不会有2个提交被合并或压缩在一起。