回到特定的提交,然后返回到当前状态。

63

我想查看过去某个提交的文件,考虑使用git reset --hard命令,但这样只能查看该提交之前的提交。有什么方法可以回到某个提交(包括文件状态),查看文件,然后返回到当前提交吗?


1
你可以通过 git show commit:path/file 命令查看文件。 - fork0
我看了好几个文件呢,嘿嘿。用文本编辑器的方式更喜欢它。还是谢谢你,下次会很方便! - Jürgen Paul
2个回答

91
假设你当前的分支是master,旧提交为a1b2c3,那么你可以使用以下命令将工作树中的所有文件还原到旧提交状态:
git checkout a1b2c3

使用以下命令切换到 master 分支:

git checkout master

这种在git历史中跳转的方式(即通过检出带有对象名称的提交,也称为其哈希或SHA1sum),非常适用于查找以前的好提交,例如用于git bisect,因为它不会移动你的分支。
需要注意的一点是,在执行此操作时,您将收到一个可能令人困惑的警告:如果您从其对象名称(a1b2c3)检出提交,则会进入一种称为“detached HEAD”的状态,其中HEAD通常表示当前分支,而是直接指向特定的提交。这不是什么需要担心的事情 - 它非常有用,可以在历史记录中移动 - 但这意味着,如果在HEAD处于分离状态时创建新的提交,则不会将分支向前移动。

fork0在下面的评论中指出了一个可能有用的快捷方式git checkout -,它将检出HEAD指向的上一个分支或提交。


没问题 - 我希望我添加的额外评论对您有所帮助。 - Mark Longair
8
有一种更安全的方法返回到之前的提交记录:git checkout -。此方法使用checkout日志(.git/logs/HEAD)并能够安全地确定之前的提交记录是什么。 - fork0
@fork0:是的,我知道git checkout -,但实际上我从来没有觉得它特别有用,因为我几乎总是知道要检出哪个分支或提交。不过,我还是会在我的答案中加上一条注释…… - Mark Longair
4
"Detached head"(分离的头)——Linus一定是《Mortal Kombat》的粉丝。 :) - Alex

1

如果您正在使用更新版本的Git(v2.23或更高版本)

假设您的分支名称为main

  1. 使用以下命令复制您想要前往的提交哈希值
git log --oneline

使用checkout命令前往特定的提交。
git checkout <commit_hash>

使用以下命令返回到您的初始状态(主分支)。
git switch main

注意:
正如您所看到的,我不会在所有情况下都使用git checkout,因为它有很多用例,有时让我感到困惑。这就是为什么我使用更新的git switch命令来简化我的git工作流程。


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