回到之前的提交记录在 Github Desktop 中

88

我想使用GitHub Desktop(即GUI应用程序-而不是命令行)返回到先前提交的版本(在同一分支上)。这应该是核心功能之一,因为这是使用源代码控制的主要原因。

我可以看到撤消提交是可能的,但这不是我想要的,因为它会创建新的提交。我只想简单地返回并有选择地再次前进,就像我可以轻松跳到另一个分支一样。

这是否可能,还是这是GitHub Desktop的限制,我需要使用命令行实现?


1
这取决于你想做什么。如果你想在本地回退,例如创建一个新的分支,你可能只需双击该提交,或查找一个名为“checkout”的选项。如果你想取消该提交所做的更改,则还原是正确的方法,否则你将更改历史记录,这是错误的。 - njzk2
仍然无法在GitHub桌面版中实现。请使用“git checkout”(或SourceTree或其他GUI中的等效命令)。请参阅https://dev59.com/im855IYBdhLWcg3w1oLa#4114122。 - ToolmakerSteve
仍然不可能:https://github.com/desktop/desktop/issues/10858 - mb21
现在可以了:https://github.com/desktop/desktop/pull/12160 - Jon
7个回答

81

一般而言,您可以使用 git reset 命令返回到您的提交历史中的某个提交。


但是 GitHub Desktop 无法实现这一功能。GitHub Desktop 更像是一个同步存储库的工具,而非功能齐全的 GUI 客户端。
但这并不意味着您必须使用命令行,因为有其他选择。您可以在 此处 找到支持 git reset 的几个客户端列表:


以下是在命令行中执行此操作的方法。大多数客户端都会在其 UI 中使用相同的词汇(通常,您可以通过上下文菜单选择提交并 "重置到它")。

您可以使用以下命令回到先前的提交:

git reset HEAD^

或者通过一些更多的提交(例如3个)

git reset HEAD^3

或特定提交版本

git reset f7823ab

请注意,Git reset默认会传递选项--mixed。所以,自重置到那个提交以来所做的所有更改仍将存在。

要获取您想要'还原'的提交的原始状态,您必须传递--hard选项。例如:

git reset f7823ab --hard

4
好的,谢谢。这肯定很有用,但是我希望能够在GitHub Desktop中做到这一点,也就是使用GUI界面。 - morishuz
据我所知,GitHub桌面版更多是用于同步您的代码库的工具。针对您的需求,我建议您使用另一个GUI客户端,比如TortoiseGitSourceTree。这里还有一个GUI客户端列表链接。它们通常具有上述提到的相同词汇表。 - SevenEleven
我强烈反对在日常 git 操作中使用 GUI 客户端。我发现自己学习 git 的速度非常快,而且还发现一些 GUI 客户端会向命令添加无意义的参数。同时,控制台命令在任何平台上都不会改变。 - JDurstberger
有没有办法我可以根据哈希值进行搜索和查看?我找不到任何搜索选项! - mfaani
感谢您帮助解决git命令问题,而不是简单地说“GitHub桌面版无法实现这个功能” :) - rinogo
6
如果您只是想查看早期状态,但最终想返回到最近的提交节点,请使用“git checkout”而不是“git reset”。请参见 https://dev59.com/im855IYBdhLWcg3w1oLa#4114122。 - ToolmakerSteve

15
如果你有一个未推送的提交,撤销该提交非常容易。当你有这样的提交时,“撤销”按钮会出现。它将从分支历史记录中删除该提交并将文件放回到“更改”区域。 提交按钮下方的撤销按钮

12
这是有关@SevenEleven答案的评论。 在考虑使用git reset之前,应给出强烈警告。 git reset是一种破坏性命令,会删除目标提交后面的更改(运行git reset[commit hash]时为提交哈希或者在运行git reset时为最新提交)。
如果我正确理解了问题,git reset违反了原始问题中所要求的内容,如下所引用的:“我只想简单地回退,并有回到当前版本的选择”。
在这种情况下,git checkout将是更为合适的命令,它允许观察和分支出以前的提交,同时保持所有更改和历史记录不变。
在执行git checkout [older-commit-hash]之后,您可以通过执行命令git checkout [newer-commit-hash]git checkout [branch-name]向前移动。
为了更好地解释git checkout/reset/revert之间的区别,您可以查看(没有刻意恶作剧)这个资源: https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
如果您无意中执行了git reset并想恢复更改,则可以参考此Stack Overflow线程: Recover from git reset --hard?

7

我在Git桌面版中找到了一个解决方案,可以不用使用命令行。

进入历史记录,右键单击要回退到的提交,然后单击"从提交创建分支"

这帮助我恢复了我在较近提交中丢失的一些数据。之后我只是删除了该分支并回到了主分支。


如果楼主想继续使用Github桌面版,这是最佳解决方案。 - TallBrianL

2
(编辑:Github Desktop缺少所请求的命令;以下是一些略有不同但可能对您有用的操作说明。)
1. Click History.  
2. In the commit history list, click the commit you'd like to revert.  
3. Right-click the commit and click Revert This Commit.  

来自GitHub的文档。


14
撤销提交和重置到特定的提交,这两个操作的作用非常不同: 重置会将 HEAD 重置到一个旧的提交,并且移除新的提交。撤销会创建一个新的提交,这个提交与所指定的提交相反。 - Benjamin Hammer Nørgaard
1
正如Benjamin所解释的那样,这不是对所问问题的回答。我已经编辑了回答来阐明这一点。具体而言,问题是关于“回滚”:回到历史上较早的某个时间点。这意味着撤销所有比所需提交更新的操作。这个答案是关于撤销单个提交的更改。 - ToolmakerSteve
3
感谢您的回答,但它是具有破坏性的并且没有回答问题。为了社区的最大利益,您应该删除这个回答。 - rinogo
2
这个答案对我仍然有效,你不应该删除这个答案,但你应该更改它,使其更清晰,即说明提交记录仍将存在,并声明您仍然进行了一些更改并将其还原。这是首选的方式,以便每个人都可以看到实际发生的情况,因为您不会破坏或隐藏更改历史。此链接提供了一些官方截图 https://help.github.com/en/desktop/contributing-to-projects/reverting-a-commit - Jose Serodio

0

Ramon是对的。从右键菜单中,使用[从提交创建分支]。 创建分支但不要推送它。 完成后,删除该分支。快速简便。

使用GitHub桌面版的命令行可能意味着您在某个地方做错了。保持简单。(我们简化了我们的流程,不再需要命令行)。让Git变得简单易用。


0

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