我想要相当于 git 的
cd -
。如果我在分支 master
并且结帐 foo
,我希望能够输入类似 git checkout -
的内容以返回到 master
,并且能够再次输入它以返回到 foo
。
有这样的事情存在吗?实施起来会不会很困难?
摘自 1.6.2 发行说明
是指您所在的最后一个分支的一种方式。 这是@{-1}
不仅在需要对象名称的地方被接受,而且在任何有对象名称的地方都被接受 分支名称是预期的,并且就像您键入分支名称一样。
例如。、git branch --track mybranch @{-1}
和git merge @{-1}
将按预期工作。git rev-parse --symbolic-full-name @{-1}
和
是git checkout -
的简写。git checkout @{-1}
查看之前结帐的列表:
i=0; while [ $? -eq 0 ]; do i=$((i+1)); echo -n "$i. "; git rev-parse --symbolic-full-name @{-$i} 2> /dev/null; done
这个 Bash 一行脚本并不完美,但它应该适用于大多数情况。请注意,有时数字可能会跳过。
提示: 您可以将其作为
添加到.bashrc
。function
当今最简单的方法是:
git checkout -
...这是以下的别名:
git checkout @{-1}
如果您想了解更多信息,我在这里写了整篇文章:Checkout The Previous Branch In Git。
Git 版本
2.23
引入了 git switch
命令,您可以使用它来执行此操作(以及更多操作)。引用官方文档:
切换到指定分支。工作树和索引被更新以匹配分支。所有新提交都将添加到此分支的提示中。
根据您的具体情况,您可以发出
git switch -
返回您之前所在的分支。您可以再次执行相同的命令以返回到第一个分支。
此命令不太容易混淆,并且对初学者友好,因为它解决了使用 git checkout
时出现的常见
confusion。
正如@Karl 指出的和
git checkout
手册中:
作为特殊情况,“@{-N}”语法用于检查第 N 个最后分支 脱离分支(而不是分离)。您还可以指定 - 这是 与“@{-1}”同义。
所以
git checkout -
和 git checkout @{-1}
在这种情况下都可以工作
我认为最接近的是使用
git reflog
moving from branch1 to branch2
和 git checkout branch1
只需在之前的答案中添加更多细节即可了解
git checkout @{-N}
的工作机制。 它会遍历 reflog 来检查结帐历史记录,因此,如果您想自己实现类似的功能,您应该能够解析 git reflog
的输出,查找 checkout:
行。 你可以在git源码中查看实现sha1_name.c
,特别是函数interpret_nth_prior_checkout
。
这里是 Git 文档中描述其他答案给出的
git checkout -
和 git checkout @{-1}
解决方案部分的指针:
@{-<n>}
,例如@{-1}
表示“在当前分支/提交之前签出的第 n 分支/提交”。 git checkout <branch>
的文档重申:“您可以使用 @{-N}
语法来引用使用 git checkout
操作签出的第 N 个最后分支/提交。”对于 <branch>
git checkout
参数,“您还可以指定‘-
’,它与‘@{-1}
’同义。”最流行的解决方案是:
git checkout @{-N}
其中 N - 在结帐历史记录中向后移动的分支的步骤计数。
参见
git chekout
和 git switch
有不同的目的。它更像是 typescript 和 javascript。请参阅 javascript 是 typescript 的一部分,类似地,git switch
具有 git checkout
的一些功能。
git checkout
主要用于在时间线中提交和移动之间切换。它也可以做 git switch
能做的所有事情。
git switch
是专门为分支之间的切换而设计的,并完成与分支相关的所有工作。
更好用
git switch -
就我而言,我已从 master 切换到 gh-pages,这导致我的所有组件消失并被文件名“static”和其他文件替换。
git checkout -m master 帮助了