git cherry-pick 的相反操作是什么?

39

是否有一种有效的 git cherry-pick 的相反操作?例如,一段时间前,我不得不进行一些临时更改来禁用一组功能,因为业务流程尚未准备好。现在,该业务流程已经准备好了,我想简单地删除这些提交及其影响。虽然我当然可以查看这些提交的差异并弄清需要完成的所有工作,但如果能在历史记录中撤消这些提交而不重置并失去之后的所有内容,那将会很有趣。

2个回答

34

git revert不是git cherry-pick的反义词,git rebase -i才是。

git revert会添加一个新的提交来撤销一个或多个旧的提交所做的更改,但不会删除原始提交。

git rebase -i会显示一个包含从当前提交开始到上游分支最后一个提交的提交列表。然后,您可以编辑、重新排列、更改提交消息,甚至从此列表中删除提交。

请注意,如果您已经推送了要删除的提交,则需要与团队成员确认是否可以删除这些提交,因为在您推送具有已删除提交的新历史记录后,他们将需要进行调整。


3
知道这件事很棒!虽然rebase -i从技术上回答了问题,而且在长远来看可能更加干净利落,但是git revert可以解决我所表达的问题。 - andyortlieb
10
git revert 是一个添加新提交的命令,它会撤销一个或多个旧提交所做的更改。这与 git cherry-pick 正好相反(可以说是“相反”的意思)。 - Code-Apprentice
9
如果 git cherry-pick 添加了一个提交,那么相反的操作就是删除该提交,而不是添加另一个提交。 - Ryan Lundy
4
a^b=c 的反函数是什么?是 log(c,a) 还是 root(c,b)?(可能取决于您认为哪个“属性”最重要) - industryworker3595112
3
回到 Git... 两个建议的命令都可以撤销已有 commit 的影响。从 Git 用户的角度来看,git rebase -i 在可被变基的分支上非常好用,而 git revert 则在不能变基的分支上很方便。由于问题中并未明确实际情况,因此应当同时提及这两个命令。 - Melebius
显示剩余6条评论

28

撤销他人提交的更改的自动化方法是使用git revert


7
请使用git rebase -i命令,如@Kyralessa的答案所述,这并不是相反的用法。 - Leo
1
请注意,要还原的提交在当前分支中根本不需要存在。例如,它可能已经被压缩到其他提交中,并保留在git reflog或另一个分支中 - 在这种情况下,git revert仍将起作用。 - Ruslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接