如何从分支中间删除提交

时间:2017-02-28 20:27:06

标签: git git-commit

我做了一些提交并将其推送到我的远程仓库。其中一个我想删除。它只包含一个二进制文件,该文件仅在该分支中的该提交中更改。如何删除它而不会造成后续提交?

2 个答案:

答案 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 

而只是强制。

force vs force-with-lease

附注。值得关注的是哪些 commit hash 发生了变化