我不小心用一些大文件推了一个提交,然后恢复了它。但这会导致任何人在历史中提取这些文件,所以我决定删除或压缩这两个提交。但是,有一个分支已经合并进来了。我不知道如何使“git rebase-i”保持分支结构。
现在的历史是这样的:
H - new commits
|
G - merge
| \
| F - commits on another branch
| |
E | - some other commits
| |
D | - corrected B
| |
C | - revert B
| |
B | - huge files
| /
A - early commit
我可以改成跟车吗?
h - new commits
|
g - merge
| \
| F - commits on another branch
| |
e | - some other commits
| |
d | - corrected B
| /
A - early commit
最佳答案
是的,你可以,但你不应该。
它将要求您重写历史记录并替换服务器上已推送的历史记录(这需要强制推送,最常见的结果是每个人都对您大喊大叫)。
但如果你真的想那么git filter-branch
就是你想用的,就像在this SO answer中一样。所以你应该这样做:
git filter-branch --commit-filter '
if [ "$GIT_COMMIT" = "<your commit to remove here>" ]
then
skip_commit "$@";
else
git commit-tree "$@";
fi' HEAD
还有几个例子here。