我最近从SVN转到Git,对一些事情有点困惑。我需要通过调试器运行脚本的以前版本,所以我做了git checkout <以前版本哈希>,并做了我需要做的事情。
现在我想回到最新的版本,但我不知道它的哈希值。当我输入git log时,我看不到它。
我该怎么做呢?此外,是否有一种比输入哈希值更简单的方法来更改版本-例如“返回两个版本”或“转到最近的年代”?
我最近从SVN转到Git,对一些事情有点困惑。我需要通过调试器运行脚本的以前版本,所以我做了git checkout <以前版本哈希>,并做了我需要做的事情。
现在我想回到最新的版本,但我不知道它的哈希值。当我输入git log时,我看不到它。
我该怎么做呢?此外,是否有一种比输入哈希值更简单的方法来更改版本-例如“返回两个版本”或“转到最近的年代”?
当前回答
我刚刚开始深入研究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
关于相对版本,我找到了这篇文章,但它只讨论了旧版本,可能没有什么可参考的新版本。
其他回答
对于Git 2.23+(2019年8月),最好的做法是使用Git switch,而不是令人困惑的Git checkout命令。
创建一个基于旧版本的新分支:
git switch -c temp_branch HEAD~2
返回当前主分支:
git switch master
当你签出一个特定的提交时,git会创建一个分离的分支。所以,如果你调用:
$ git branch
你会看到如下内容:
* (detached from 3i4j25)
master
other_branch
回到主分支头,你只需要再次签出到你的主分支:
$ git checkout master
该命令将自动删除已分离的分支。
如果git签出不起作用,你可能修改了分支之间冲突的文件。为了防止你丢失代码,git要求你处理这些文件。你有三个选择:
保存你的修改(你可以稍后弹出它们): $ git赃物 丢弃重置分离分支的更改: $ git重置——很难 用之前的修改创建一个新的分支并提交它们: $ git checkout -b my_new_branch $ git添加my_file.ext $ git commit -m "My cool msg"
在这之后,你可以回到你的主分支(最新版本):
$ git checkout master
这对我来说很管用(我仍然在主分支上):
git reset --hard origin/master
当你回到以前的版本,
$ 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
这里的一些答案假设在您决定签出旧的提交之前,您在主分支上。但情况并非总是如此。
git checkout -
将指向您之前所在的分支(不管它是否是主分支)。