有什么方法可以git checkout以前的分支吗?

问题描述 投票:0回答:10

我想要相当于 git 的

cd -
。如果我在分支
master
并且结帐
foo
,我希望能够输入类似
git checkout -
的内容以返回到
master
,并且能够再次输入它以返回到
foo

有这样的事情存在吗?实施起来会不会很困难?

git git-checkout
10个回答
1645
投票

摘自 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


326
投票

当今最简单的方法是:

git checkout -

...这是以下的别名:

git checkout @{-1}

git checkout minus

如果您想了解更多信息,我在这里写了整篇文章:Checkout The Previous Branch In Git


44
投票

Git 版本

2.23
引入了
git switch
命令,您可以使用它来执行此操作(以及更多操作)。引用官方文档:

切换到指定分支。工作树和索引被更新以匹配分支。所有新提交都将添加到此分支的提示中。

根据您的具体情况,您可以发出

git switch -
返回您之前所在的分支。您可以再次执行相同的命令以返回到第一个分支。

此命令不太容易混淆,并且对初学者友好,因为它解决了使用 git checkout 时出现的常见

confusion


33
投票

正如@Karl 指出的和

git checkout
手册中:

作为特殊情况,“@{-N}”语法用于检查第 N 个最后分支 脱离分支(而不是分离)。您还可以指定 - 这是 与“@{-1}”同义。

所以

git checkout -
git checkout @{-1}
在这种情况下都可以工作

我认为最接近的是使用

git reflog
并解析最新的
moving from branch1 to branch2
git checkout branch1


15
投票

我带着同样的想法提出这个问题来查看我以前的分支。我在 Mac 中使用

ohmyz
。下面的命令帮助了我。

$ gco -
$ git checkout -

11
投票

只需在之前的答案中添加更多细节即可了解

git checkout @{-N}
的工作机制。 它会遍历 reflog 来检查结帐历史记录,因此,如果您想自己实现类似的功能,您应该能够解析
git reflog
的输出,查找
checkout:
行。 你可以在git源码中查看实现
sha1_name.c
,特别是函数
interpret_nth_prior_checkout


2
投票

这里是 Git 文档中描述其他答案给出的

git checkout -
git checkout @{-1}
解决方案部分的指针:

  • 为任何命令指定 Git 修订版时,

    @{-<n>}
    ,例如
    @{-1}
    表示“在当前分支/提交之前签出的第 n 分支/提交”。
    git checkout <branch>
    的文档重申:“您可以使用
    @{-N}
    语法来引用使用
    git checkout
    操作签出的第 N 个最后分支/提交。”

  • 对于 <branch>

    git checkout
    参数,“您还可以指定‘
    -
    ’,它与‘
    @{-1}
    ’同义。”


1
投票

最流行的解决方案是:

git checkout @{-N}

其中 N - 在结帐历史记录中向后移动的分支的步骤计数。


0
投票

参见

git chekout
git switch
有不同的目的。它更像是 typescriptjavascript。请参阅 javascripttypescript 的一部分,类似地,
git switch
具有
git checkout
的一些功能。

git checkout
主要用于在时间线中提交和移动之间切换。它也可以做
git switch
能做的所有事情。

git switch
是专门为分支之间的切换而设计的,并完成与分支相关的所有工作。

更好用

git switch -

-2
投票

就我而言,我已从 master 切换到 gh-pages,这导致我的所有组件消失并被文件名“static”和其他文件替换。

git checkout -m master 帮助了

© www.soinside.com 2019 - 2024. All rights reserved.