如何回到Git的最新版本?

我最近从SVN转到Git,对一些事情有点困惑。我需要通过调试器运行一个脚本的以前版本,所以我执行git checkout <previous version hash>并做了我需要做的事情。

现在我想回到最新的版本,但我不知道它的哈希值。当我输入git log时,我看不到它。

我该怎么做呢?此外,是否有一种比输入哈希值更简单的方法来更改版本-例如“返回两个版本”或“转到最近的年代”?

325782 次浏览

git checkout master应该做的把戏。要回到两个版本,你可以说类似git checkout HEAD~2这样的话,但最好在那时创建一个临时分支基于,因此git checkout -b temp_branch HEAD~2

首先,您可以使用分支名称签出。

我知道有几种方法可以移动HEAD,但是我将把它留给git专家来列举它们。

我只是想建议gitk --all——当开始使用git时,我发现它非常有用。

我刚刚开始深入研究git,所以不确定我是否理解正确,但我认为对OP的问题的正确答案是,你可以用这样的格式规范运行git log --all: git log --all --pretty=format:'%h: %s %d'。这将当前签出的版本标记为(HEAD),您可以从列表中获取下一个版本。

顺便说一句,在你的.gitconfig中添加一个这样的别名,格式稍微好一点,你可以运行git hist --all:

  hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph

关于相对版本,我发现这个帖子,但它只谈论较旧的版本,可能没有什么可以参考较新的版本。

这对我来说很管用(我仍然在主分支上):

git reset --hard origin/master

当你签出一个特定的提交时,git会创建一个分离的分支。所以,如果你调用:

$ git branch

你会看到如下内容:

* (detached from 3i4j25)
master
other_branch

回到主分支头,你只需要再次签出到你的主分支:

$ git checkout master

该命令将自动删除已分离的分支。

如果git checkout不起作用,你可能修改了分支之间冲突的文件。为了防止你丢失代码,git要求你处理这些文件。你有三个选择:

  1. 隐藏你的修改(你可以稍后弹出它们):

    $ git stash
    
  2. Discard the changes reset-ing the detached branch:

    $ git reset --hard
    
  3. Create a new branch with the previous modifications and commit them:

    $ git checkout -b my_new_branch
    $ git add my_file.ext
    $ git commit -m "My cool msg"
    

After this you can go back to your master branch (most recent version):

$ git checkout master

一个更优雅和简单的解决方案是使用

git stash

它将返回到分支的最新本地版本,并将您的更改保存在stash中,所以如果您想撤消此操作,请执行:

git stash apply

当你回到以前的版本,

$ git checkout HEAD~2
Previous HEAD position was 363a8d7... Fixed a bug #32

即使在这种情况下,您也可以使用此命令查看您的特性日志(哈希);

$ git log master --oneline -5
4b5f9c2 Fixed a bug #34
9820632 Fixed a bug #33
...

master可以替换为另一个分支名称。

然后签出它,你将能够回到功能。

$ git checkout 4b5f9c2
HEAD is now at 4b5f9c2... Fixed a bug #34

返回最新版本。

git checkout <branch-name>

例如,git checkout mastergit checkout dev

这里的一些答案假设在您决定签出旧的提交之前,您在主分支上。但情况并非总是如此。

git checkout -

将指向您之前所在的分支(不管它是否是主分支)。

对于Git 2.23+(2019年8月),最佳实践是使用git switch而不是困惑git checkout命令。

创建一个基于旧版本的新分支:

git switch -c temp_branch HEAD~2

返回当前主分支:

git switch master