1
知道,这将改变历史,我想删除一些不小心从库的历史承诺。我希望所有其他提交都保留其存储库的状态。因此,我想要删除的提交更改将由提交后的提交来覆盖。
我该如何在Git中做到这一点,我怎样才能将其应用于Github上的存储库?
知道,这将改变历史,我想删除一些不小心从库的历史承诺。我希望所有其他提交都保留其存储库的状态。因此,我想要删除的提交更改将由提交后的提交来覆盖。
我该如何在Git中做到这一点,我怎样才能将其应用于Github上的存储库?
如果我理解正确,“压扁”就是你想要的。
-A-B-C-D-E-F-G-H
考虑到上面的历史,你应该在第一次提交之前选择你想压缩的提交。比方说,你想壁球F和E为d和H为G,所以在第一个是C.
git rebase -i C
您将看到一个编辑器包含类似下面的文本文件提交:
pick D
pick E
pick F
pick G
pick H
修改到这一点:
pick D
squash E
squash F
pick G
squash H
你会被要求审查提交新提交的信息,
产生的历史将是这样的:
-A-B-C-D'-G'
请注意你总是挤压较新提交到旧的,而不是相反。因此,pick G
和squash H
。把它看作是在你的历史继续之后修改一个提交。注意:为了将它存入你的GitHub仓库,你需要强制推入git push -f origin
(假设origin
是你的GitHub远程)。
PPS:欲了解更多信息,请参阅man page of git-rebase。
那么我的历史将成为'A-B-C-D-G'? – danijar
它是'-A-B-C-D'-G',我编辑了我的答案。但是'D'= D + E + F'和'G'= G + H'。 – Koraktor
后来的提交是否受到影响?例如,如果我从“A-B-C-D”开始,并将“C”压缩到“B”中。结果是“A-B'-D”还是“A-B'-D'”? – danijar