我做了一些提交并将其推送到我的远程仓库。其中一个我想删除。它只包含一个二进制文件,该文件仅在该分支中的该提交中更改。如何删除它而不会造成后续提交?
答案 0 :(得分:4)
您可以使用operation = raw_input("what do you want to do (+,-,/,*):")
删除之前的提交。
interactive (-i) rebase
编辑器将打开一个提交列表,每行一个。这些行中的每一行都以$ git log # copy the target commit
$ git rebase -i <target-commit>~1 # start rebase from the previous commit of target commit
开头。 注释掉目标提交的行(将pick
放在目标提交行的开头)。
#
现在,您需要强制(-f)推送到远程,因为git历史记录已更改。
$ git rebase --continue # repeat the command until finish rebase
答案 1 :(得分:1)
应该在回答中考虑标志 --rebase-merges,因为接受的解决方案将删除 HEAD 和目标提交之间的合并提交~1
示例:
<块引用>在任何变基之前:
f3e07b4 (HEAD -> dev, origin/dev) headCommit
dd3d182 Merged PR 425: added playoutServerUsage
7ed3eb5 added playoutServerUsage
03b52af feat: add Description Series #targetCommit
0a1217c some_older_commit
<块引用>
git rebase -i target-commit~1
c11fa07 (HEAD -> dev) headCommit
7ed3eb5 added playoutServerUsage
0a1217c some_older_commit
<块引用>
git rebase -i target-commit~1 --rebase-merge
a1943b6 (HEAD -> dev) headCommit
12411a1 Merged PR 425: added playoutServerUsage
7ed3eb5 added playoutServerUsage
0a1217c some_older_commit
带有标志 --rebase-merges 的变基可能会更难,整个过程会更长(更大的树),但我们仍然必须 定位目标提交并将 'pick' 更改为 'drop'
之后我会推荐使用
git push --force-with-lease origin HEAD
而只是强制。
附注。值得关注的是哪些 commit hash 发生了变化