如何撤消多个提交

时间:2016-12-06 16:46:36

标签: git

如果我有以下日志记录:

d46a977 Commit 3
750bcaa Commit 2
a49d225 Commit 1

我想恢复提交1,失去在提交2和提交3中所做的更改。应该怎么做?

我一直在阅读一些教程,例如https://www.atlassian.com/git/tutorials/undoing-changes/git-checkout

但是从我可以看出,revert可以用于最后一次提交,并且可以使用reset来撤消一些。但是在教程中我没有看到任何使用reset的例子,其中指定了实际的提交版本(即重置为a49d225)。因此我很困惑它是如何重置的。

2 个答案:

答案 0 :(得分:1)

git reset --hard a49d225

将重置您的本地存储库以提交a49d225并拒绝所有进一步的更改。请参阅manual for git-reset

但是,如果您已将更改推送到远程,则不应执行此操作。在这种情况下,我只是检查一下提交并在那里创建一个新的分支。

git checkout a49d225
git checkout -b feature/new-branch

如果它不是一个只有你正在处理的功能分支,而是整个团队共享的东西(比如整个项目的masterdevelop分支),那么最佳选择似乎要明确地恢复你不再需要的两个提交。

git revert d46a977
git revert 750bcaa

这将创建两个新的提交,其中的增量将取消原始提交2 提交3 。在历史记录中可以看到这些更改已引入然后显式回滚。此外,通过这种方式,您可以避免更改历史记录,以便您的团队能够安全地推送和拉动。

只要这些不是合并提交,这应该是完全正常的。这些可能需要额外的关注。

答案 1 :(得分:0)

您可以使用rebase,将当前分支重新绑定到提交1。 (从提交1创建一个分支,然后将主分支重新绑定到这个新创建的分支。)

相关问题