我正在尝试使用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
所代表的确切树。
我正在做什么的快捷方式?我有确切的内容和提交我想要的信息,我只想把它显示为祖父母(或其他后代)的孩子。
答案 0 :(得分:3)
有两种可能的情况:您在午餐后完成工作,并且您希望将更改修改为最后一次提交,并重新提交提交,然后使用:
git commit --amend
假设您的消息没问题,并且您只想添加一些更改,那么您可以使用--no-edit
选项:
git commit --amend --no-edit
通过这种方式,之后永远不会有2个提交被合并或压缩在一起。