如何将所有内容回滚到以前的提交版本

70

最近在一项多人参与的项目中,出现了下图所示的提交。你可以看到标为红色的提交,其描述/注释为“合并?”。

这个提交添加了许多文件并修改了许多其他文件,但其实并不打算执行。

使用,我需要怎么做才能回滚到蓝色高亮显示的提交呢?(如截图所示,我落后了8个提交。)

sourcetree troubleshoot


8
我不了解那个程序,但在git bash中,你可以执行git reset --hard [提交记录的哈希值]来完成操作。 - PlasmaPower
“hard”操作是否会删除在“bad commit”之后的所有其他提交? - captainrad
是的,它会将一切都恢复到你传递给它的提交之后的状态。 - PlasmaPower
2
实际上,只有垃圾收集才能从Git中删除提交记录,但git reset移动分支指针后,一旦提交记录"超出了任何分支的最新状态",它们就变得可以被垃圾收集器回收。 (该分支的引用日志将在默认过期时间30天之前保留这些提交记录。)所以它们有效地消失了,但在紧急情况下,您可以在一个月左右的时间内“取消删除”它们。 - torek
右键单击 -> 反向提交 -> 推送。http://flummox-engineering.blogspot.com/2014/10/how-to-undo-git-commit-in-sourcetree.html - Kanagavelu Sugumar
3个回答

104

如果您已将提交推送到上游...

选择您要回滚的提交,然后通过单击 Reverse FileReverse HunkReverse Selected Lines 来撤消更改。对于您希望回滚到之前的提交后所有的提交都要这样做。

reverse stuff reverse commit

如果您尚未将提交推送到上游...

右键单击提交,然后单击 Reset current branch to this commit

reset branch to commit


5
理念是相同的。请随意修改 @Yeats - 0xcaff
7
重置分支到之前的提交后,接下来该怎么办?现在它要求我将所有内容拉回到当前版本。我无法推送任何东西。 - Neville Nazerane
@NevilleNazerane 强制推送。 - 0xcaff
2
我试过了,但图形用户界面将其置为灰色。终端也不起作用。 - Neville Nazerane
1
对于 SourceTree 右键菜单中某些项目变灰的用户:我重启了 SourceTree 后,菜单恢复正常了。 - Lesley
显示剩余4条评论

44

我搜索了多种方法来将我的 git 重置到特定的提交点,但大多数方法并不令人满意。

通常我在 SourceTree 中使用以下步骤来将 git 重置到特定的提交点:

  1. 在 SourceTree 中选择要重置的提交点。

  2. 在下拉菜单中选择当前分支,然后选择“仅第一个父提交”。

  3. 右键单击“将分支重置到此提交”,并选择硬重置选项(包括软重置、混合重置和硬重置)。

  4. 最后,在终端中运行 git push -f 命令。

完成后你就可以按照所需操作重新设置 git 了!


4
只有在你没有将提交推送到上游时,答案才是安全的。 - Michael Freidgeim
答案只有在您尚未将提交推送到上游时才有效。 - mgyky
5
这个答案在向上推送提交之后仍然有效。 - shalonteoh
1
此响应提供了一个完全回滚所选提交之后的所有提交。 - Takatalvi

6

撤销一个提交或合并分支有两种选择。

A. 使用sourcetree

  • 右键单击提交
  • 选择“反向提交”
  • 有时会失败。在这种情况下,请尝试选项B。

B. 使用终端

  • 选择您的提交并查看屏幕底部的信息。示例提交 ID:1a6cd9879d8c7d98cdcd9da9cac8979dac7a89c

  • 点击Sourcetree右上角的"终端"选项。

  • 在终端中输入:git revert your_commit_id -m 1

  • 当提交消息编辑器弹出时:

    • 仅接受并退出,输入:q然后按Enter。
    • 如果您想更改提交消息,请按"i",输入您的消息,然后输入:wq并单击Enter。

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