如何在签出先前的提交后返回到最新的提交?

Leo*_*yev 433 git version-control

我有时会检查一些以前版本的代码来检查或测试.如果我想修改以前的提交,我已经看到了如何操作的说明 - 但是假设我没有做任何更改.在我完成例如之后,我git checkout HEAD^如何回到分支的尖端?... git log不再向我显示最新提交的SHA.

Phi*_*ler 548

如果你知道你想要返回的提交是某个分支的头部,或者被标记,那么你可以

git checkout branchname
Run Code Online (Sandbox Code Playgroud)

您还可以使用git reflog以查看过去HEAD(或任何其他引用)指向的其他提交内容.


编辑添加:

在较新版本的Git中,如果您只运行git checkout或其他东西移动HEAD一次,您也可以这样做

git checkout -
Run Code Online (Sandbox Code Playgroud)

切换回上次结账前的任何地方.这可以通过类比shell的习惯cd -来回到以前的工作目录.

  • 我想提一下,典型的例子是"git checkout master".我学习使用git的困难之一是我不知道具体的关键字(例如"master")我实际上可以代替像"branchname"这样的占位符字. (23认同)
  • `master`实际上不是任何关键字,就像`HEAD`那样.它只是新存储库中的默认分支名称.您可以运行`git branch`来获取存储库中的分支列表,并使用`git tag -l`获取标记列表.类似地,`origin`是克隆存储库的远程的默认名称,但它并没有什么特别之处. (3认同)
  • 如果不清楚,`git reflog`会给你一个哈希列表,此时你可以使用`git checkout [commit-hash]`. (3认同)

小智 24

git checkout master

master是提示或最后提交. gitk只会告诉你当时你在树上的位置. git reflog将显示所有提交,但在这种情况下,你只需要提示,所以git checkout master.

  • 这。或者 `git checkout 分支名称` (4认同)

816*_*055 18

刚刚遇到这个问题并有一些补充

要转到最近的提交:

git checkout $(git log --branches -1 --pretty=format:"%H")
Run Code Online (Sandbox Code Playgroud)

说明:

git log --branches显示从所有本地分支
-1限制到一个提交的提交日志→最近提交
--pretty=format:"%H"格式仅显示提交哈希
git checkout $(...)使用子shell的输出作为结帐的参数

注意:

这将导致一个分离的头(因为我们直接签出提交).这可以通过使用提取分支名称来避免sed,如下所述.


要转到最近提交的分支:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
Run Code Online (Sandbox Code Playgroud)

说明:

git log --branches显示从所有本地分支
-1限制到一个提交的提交日志→最近的提交
--pretty=format:"%D"格式仅显示引用名称
| sed 's/.*, //g'忽略除多个引用的最后一个(*)
git checkout $(...)使用subshel​​l的输出作为结帐的参数

*)首先列出HEAD和远程分支,按字母顺序依次列出最后的本地分支,因此剩余的分支将按字母顺序排列第一个分支名称

注意:

如果该提交有多个,则始终只使用(按字母顺序)第一个分支名称.


无论如何,我认为最好的解决方案就是显示最近提交的引用名称以了解到哪里结帐:

git log --branches -1 --pretty=format:'%D'
Run Code Online (Sandbox Code Playgroud)

例如git top,为该命令创建别名.


tan*_*ius 9

看一下图形GUI ...... gitk它显示了所有提交.有时工作图形更容易... ^^


小智 7

您可以使用以下git命令之一:

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


小智 6

如果您的最新提交位于 master 分支上,您可以简单地使用

git checkout master
Run Code Online (Sandbox Code Playgroud)


Ati*_*eed 5

git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>
Run Code Online (Sandbox Code Playgroud)