"修改"先前提交并编辑邮件

时间:2018-04-11 10:20:26

标签: git git-commit git-reset

假设我想通过我当前的最后一次提交更改HEAD~2" HEAD"没有HEAD改变〜。此外,我想从HEAD~2编辑消息而不是覆盖它(只需对消息进行一些更改)。 我找到了这样的方式: 这是我目前的git日志: enter image description here

然后我按照以下命令执行了此操作:

git reset --mixed Head~3
git add new_file.cpp
git commit -m "Erased previous new_file.cpp by current new_file"
git add other_file.cpp
git commit -m "Added other_file.cpp"

所以现在我明白了:

enter image description here

正如您所看到的,我已经重写了所有提交以使其清晰。 因为我在重置时非常新手......它可能有点脏。

是否可以通过"编辑"来获得这种清洁剂?提交? 例如,我想编辑第一次提交中的上一条消息,并保留第二条消息的完整信息。

此外,我进行修改的方式让我觉得以前的提交仍然存在并且必须污染存储库:它们会被删除还是留在那里?

P.S:the GitHub repository(由于我在找到正确的命令之前犯了一些命令错误,因此reflog非常可怕)

2 个答案:

答案 0 :(得分:1)

如果不更改所有后代的(至少SHA),则无法更改提交消息。但是,如果你仍然想要这样做(例如你之前做过拼错而你还没有发布你的提交)那么你可以这样做:

git rebase --interactive HEAD~2

然后在提交到pick的行开头更改reword。它将为您完成所有git checkout / git commit --amend / git rebase魔法。

如果您想了解更多信息:

答案 1 :(得分:1)

  

而且,我做修改的方式让我想到了以前   提交仍然存在,必须污染存储库:他们会   被删除或留在那里?

他们最终将被垃圾收集。但你不应该认为无法访问的提交是一个问题,拥有大量的提交是完全正常的,因为有很多操作,如rebasereset

说到rebase:正如@TimBiregeleisen所提到的,我认为交互式rebase将是更清晰的解决方案:git rebase -i HEAD~2允许您修改最后两次提交。您可以选择重写提交消息,编辑整个提交,将几个提交压缩成一个和其他东西;那里有大量文档(例如herehere)。

当然,交互式rebase会创建全新且闪亮的提交并让旧的提交悬空,但是,如上所述,只要你没有推送那些旧的提交和某人就没有问题其他人开始在他们身上工作