323

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

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

我怎样才能做到这一点?此外,有没有比输入哈希更简单的方法来更改版本 - 例如“返回两个版本”或“转到按时间顺序排列的最新版本”?

4

10 回答 10

394

git checkout master应该做的伎俩。要返回两个版本,您可以说类似,但最好根据git checkout HEAD~2那个时间创建一个临时分支,所以git checkout -b temp_branch HEAD~2

于 2010-08-24T17:17:29.827 回答
60

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

$ git branch 

你会看到类似的东西:

* (detached from 3i4j25)
  master
  other_branch

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

$ git checkout master

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

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

  1. 存储您的修改(您可以稍后弹出它们):

    $ git stash
    
  2. 丢弃重置分离分支的更改:

    $ git reset --hard
    
  3. 使用先前的修改创建一个新分支并提交它们:

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

在此之后,您可以返回您的主分支(最新版本):

$ git checkout master
于 2015-02-24T18:46:07.527 回答
41

这对我有用(我仍然在主分支上):

git reset --hard origin/master
于 2013-08-01T14:13:47.713 回答
15

这里的一些答案假设您在决定签出较旧的提交之前处于 master 分支。这并非总是如此。

git checkout -

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

于 2019-06-16T08:39:42.303 回答
11

要返回最新版本:

git checkout <branch-name> 

例如,git checkout mastergit checkout dev

于 2016-11-10T19:35:08.823 回答
7

一方面,您可以使用分支名称签出。

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

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

于 2010-08-24T17:20:43.033 回答
7

我刚刚开始深入研究 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

关于相对版本,我找到了这篇文章,但它只谈论旧版本,可能没有什么可以参考新版本。

于 2011-10-27T05:04:22.700 回答
3

当你回到以前的版本时,

$ 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
于 2016-05-10T01:13:53.247 回答
1

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

要基于旧版本创建新分支:

git switch -c temp_branch HEAD~2

要返回当前的 master 分支:

git switch master
于 2020-01-05T19:54:56.777 回答
0

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

git stash

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

git stash apply
于 2015-11-29T14:36:05.110 回答