如何回到Git中的最新版本?

Nat*_*ong 291 git git-checkout

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

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

我怎样才能做到这一点?此外,是否有更简单的方法来更改版本,而不是键入哈希 - 类似"返回两个版本"或"按时间顺序排列最近"?

Ana*_*tts 355

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

  • @Nathan:没错.HEAD是一种称为符号引用的东西 - 它通常是指向另一个引用(当前已检出的分支)的指针.`git checkout`是一种移动HEAD的方法.当您分离HEAD时,您直接指向给定的提交; 当你再次检查主人时,它指向主人.(许多命令如`git log`实际上都采用了修订范围,默认为HEAD.) (7认同)
  • 凉!`git checkout master`正是我从分支机构切换回来的方式.那么这是否意味着当我查看以前的版本时,我实际上是在创建一个分支? (5认同)
  • @Nathan:在git中,分支实际上是指向某个修订版的可移动指针.所以在概念上,你有点创建一个分支,但不是git想到分支的意义上. (4认同)
  • 所以在最简单的情况下,我有一堆线性变化,当我检查一个早期版本时,我将HEAD指针移动到那里,这意味着`git log`将相对于该点显示?当我结账大师时,我将指针移动到最新版本的主分支? (2认同)
  • 是的 - HEAD是"代词",用于表示"工作目录中的代码版本".它也是"你接下来所做的一切的父母"的代名词 (2认同)
  • 为了更通用,命令应该是`git checkout &lt;branch-name&gt;`。如果您要专门结帐到master分支,则上述命令有效。 (2认同)

Tho*_*mio 49

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

$ git branch 
Run Code Online (Sandbox Code Playgroud)

你会看到类似的东西:

* (detached from 3i4j25)
  master
  other_branch
Run Code Online (Sandbox Code Playgroud)

要返回主分支头,您只需要再次检查到主分支:

$ git checkout master
Run Code Online (Sandbox Code Playgroud)

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

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

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

    $ git stash
    
    Run Code Online (Sandbox Code Playgroud)
  2. 放弃重置分离分支的更改:

    $ git reset --hard
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用先前的修改创建一个新分支并提交它们:

    $ git checkout -b my_new_branch
    $ git add my_file.ext
    $ git commit -m "My cool msg"
    
    Run Code Online (Sandbox Code Playgroud)

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

$ git checkout master
Run Code Online (Sandbox Code Playgroud)


ave*_*sko 33

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

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

  • **reset --hard**是一种矫枉过正的行为,并证明您不了解所做的修改.这可能导致代码丢失. (32认同)

Jay*_*Jay 7

您可以使用分支名称进行检查.

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

我只是想建议gitk --all- 我发现从git开始时它非常有用.


Reg*_*ham 7

要返回最新版本:

git checkout <branch-name> 
Run Code Online (Sandbox Code Playgroud)

例如,git checkout mastergit checkout dev


har*_*dsv 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
Run Code Online (Sandbox Code Playgroud)

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


Ita*_*oam 5

这里的一些答案假设您在决定签出较早的提交之前就已经在master分支上。这并非总是如此。

git checkout -
Run Code Online (Sandbox Code Playgroud)

将使您回到先前所在的分支(无论它是否是主分支)。

  • 不一定是分支,它会将 HEAD 指向之前指向的位置;如果你在 `git checkout hash1` 之后执行了 `git checkout hash2`,`git checkout -` 将会带你回到 `hash1`。 (3认同)