我最近从SVN搬到了Git,对某些事情感到有些困惑。我需要通过调试器运行以前版本的脚本,所以我做了git checkout <previous version hash>
并做了我需要做的事情。
现在我想回到最新版本,但我不知道它的哈希值。当我输入git log
时,我看不到它。
我该怎么做?此外,是否有更简单的方法来更改版本,而不是输入哈希值 - 比如“返回两个版本”或“按时间顺序排列最近”?
答案 0 :(得分:337)
git checkout master
应该做到这一点。要返回两个版本,你可以说git checkout HEAD~2
之类的东西,但最好在那个时候创建一个基于的临时分支,所以git checkout -b temp_branch HEAD~2
答案 1 :(得分:49)
当您签出特定提交时,git会创建一个分离的分支。所以,如果你打电话:
$ git branch
你会看到类似的东西:
* (detached from 3i4j25)
master
other_branch
要回到主分支机构,您只需要再次结帐到主分支机构:
$ git checkout master
此命令将自动删除分离的分支。
如果git checkout
不起作用,您可能修改了分支之间冲突的文件。为了防止你丢失代码git需要你处理这些文件。您有三种选择:
存储您的修改(您可以稍后弹出):
$ git stash
放弃重置分离分支的更改:
$ git reset --hard
使用之前的修改创建一个新分支并提交它们:
$ git checkout -b my_new_branch
$ git add my_file.ext
$ git commit -m "My cool msg"
在此之后,您可以返回主分支(最新版本):
$ git checkout master
答案 2 :(得分:30)
这对我有用(我仍然在主分支上):
git reset --hard origin/master
答案 3 :(得分:7)
您可以使用分支机构名称进行检查。
我知道有几种方法可以移动HEAD,但是我会把它留给git专家来枚举它们。
我只是想建议gitk --all
- 我发现从git开始时它非常有用。
答案 4 :(得分:6)
我刚刚开始深入研究git,所以不确定我是否理解正确,但我认为OP问题的正确答案是你可以使用如下格式规范运行git log --all
:{{ 1}}。这会将当前签出的版本标记为git log --all --pretty=format:'%h: %s %d'
,您只需从列表中获取下一个版本。
顺便说一句,将这样的别名添加到(HEAD)
,格式稍微好一点,然后就可以.gitconfig
运行:
git hist --all
关于相对版本,我发现了这个post,但它只讨论旧版本,可能没有什么可以引用新版本。
答案 5 :(得分:6)
要返回最新版本:
git checkout <branch-name>
例如,git checkout master
或git checkout dev
答案 6 :(得分:4)
这里的一些答案假设您在决定签出较早的提交之前就已经在master分支上。并非总是如此。
git checkout -
将使您回到以前所在的分支(无论它是否是主分支)。
答案 7 :(得分: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
答案 8 :(得分:1)
在Git 2.23+(2019年8月)中,最佳实践是使用git switch
而不是confusing git checkout
命令。
要基于旧版本创建新分支:
git switch -c temp_branch HEAD~2
要返回到当前的master分支:
git switch master
答案 9 :(得分:0)
更优雅,更简单的解决方案是使用
git stash
它将返回最重新发布的本地版本的分支,并将您的更改保存在存储中,因此如果您要撤消此操作,请执行以下操作:
git stash apply