2010-08-24 79 views
203

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

现在我想回到最新版本,但我不知道它的散列。当我输入git log时,我没有看到它。

我该怎么做?另外,是否有更简单的方法来改变版本,比输入哈希值 - 例如“回到两个版本”或“按照时间顺序排列最近”?

回答

247

git checkout master应该做的伎俩。回去两个版本,你可以这样说:git checkout HEAD~2,但最好创建基于在那个时候临时党支部,所以git checkout -b temp_branch HEAD~2

+4

酷! 'git checkout master'正是我如何从分支切换回来的。那么这是否意味着当我查看以前的版本时,我基本上创建了一个分支? – 2010-08-24 17:19:19

+3

@Nathan:在git中,一个分支实际上大多是一个指向特定修订版的可移动指针。所以从概念上讲,你有点创建一个分支,但不是git想到分支的意思。 – DLH 2010-08-24 17:26:17

+2

因此,在最简单的情况下,我得到了一堆线性变化,当我检出一个较早版本时,我将HEAD指针移到那里,这意味着'git log'会相对于那个点显示?当我结帐主,我将指针移动到最新版本的主分支? – 2010-08-24 17:30:33

4

您可以检查出使用分支名称,一两件事。

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

我只是想建议gitk --all - 我发现它非常有用的时候开始与git。

+3

+1问题。 ** SO **有用。 – DLH 2010-08-24 17:23:31

6

我刚开始深入挖掘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 

关于相关版本,我发现这个post,但它只是早期版本的会谈,可能没有什么可以提及新版本。

22

这奏效了,我(我仍然在主分支):

git reset --hard origin/master

+23

**重置--hard **是一种矫枉过正的行为,表明您并不知道您所做的修改。这可能导致它丢失代码。 – Thomio 2016-03-08 13:38:02

+0

在我的情况下,我想摆脱unpushed意外承诺的变化。我知道还有其他方法可以实现这一点。我同意,如果你不想放松你未经承诺的改变,这是数据丢失。 – 2017-08-31 23:57:30

29

当你检出到一个特定的提交,Git会创建一个分支分离。所以,如果你拨打:

$ git branch 

你会看到类似这样的:

* (detached from 3i4j25) 
    master 
    other_branch 

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

$ git checkout master 

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

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

  1. 藏匿您的修改(以后可以弹出他们):

    $ git stash 
    
  2. 放弃更改复位-ING分离的分支:

    $ git reset --hard 
    
  3. 创建与之前的修改并承诺它们的新分支:

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

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

$ git checkout master 
0

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

git stash 

它将返回最受欢迎的分支本地版本,并保存您的更改隐藏,所以如果您想撤消此操作,请执行以下操作:

git stash apply 
2

当你回到以前的版本,

$ 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 
1

要返回到最新版本:

git checkout <branch-name> 

例如,git checkout mastergit checkout dev