如果我在分支master中 checkout 了foo,我希望能够输入类似git checkout -的内容返回到master,并且能够再次输入返回到foo。是否存在这样的东西?是否难以实现?
master
foo
git checkout -
t5fffqht1#
从release notes for 1.6.2@{-1}是一种引用您所在的最后一个分支的方式。不仅在需要对象名的地方接受,而且在需要分支名的地方也接受,就像您键入了分支名一样。例如git branch --track mybranch @{-1}、git merge @{-1}和git rev-parse --symbolic-full-name @{-1}将按预期工作。和git checkout -是git checkout @{-1}的简写。若要查看先前 checkout 的列表:i=0; while [ $? -eq 0 ]; do i=$((i+1)); echo -n "$i. "; git rev-parse --symbolic-full-name @{-$i} 2> /dev/null; done
@{-1}
git branch --track mybranch @{-1}
git merge @{-1}
git rev-parse --symbolic-full-name @{-1}
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
function
.bashrc
vlf7wbxs2#
现在最简单的方法是:
...它是以下项的别名:
如果你想知道更多关于这一点,我写了一篇完整的文章在这里:Checkout The Previous Branch In Git。
yvgpqqbh3#
Git版本2.23引入了git switch命令,你可以用它来完成这个任务(以及更多)。切换到指定的分支。工作树和索引会更新以匹配该分支。所有新提交都将被添加到该分支的顶端。在您的特定情况下,您可以执行git switch -返回到您之前所在的分支。您可以再次执行相同的命令返回到第一个分支。此命令不那么容易混淆,并且对初学者很友好,因为它解决了使用git checkout时出现的常见confusion问题。
2.23
git switch
git switch -
git checkout
lnvxswe24#
正如@Karl所指出的和来自git checkout手册的:作为一种特殊情况,最后第N个分支的“@{-N}”语法 checkout 该分支(而不是分离)。您还可以指定-,它与“@{-1}"同义。因此,git checkout -和git checkout @{-1}都适用于这种情况我认为最接近的是使用git reflog并解析最新的moving from branch1 to branch2和git checkout branch1
git reflog
moving from branch1 to branch2
git checkout branch1
3mpgtkmj5#
我在这个问题上的想法和我以前的分支一样。我在Mac中使用ohmyz。下面的命令帮助了我。
Mac
$ gco - $ git checkout -
kjthegm66#
只是在前面的答案中添加一些细节来理解git checkout @{-N}的工作机制。它遍历reflog来检查 checkout 历史,所以如果你想自己实现类似的东西,你应该能够解析git reflog的输出,寻找checkout:行。你可以在git源代码sha1_name.c中检查实现,特别是函数interpret_nth_prior_checkout。
git checkout @{-N}
checkout:
sha1_name.c
interpret_nth_prior_checkout
vbopmzt17#
以下是Git文档中描述git checkout -和git checkout @{-1}解决方案的部分内容:
@{-<n>}
git checkout <branch>
@{-N}
<branch>
-
3htmauhk8#
最流行的解决方案是:
其中,N -在检出历史上向后移动的分支的步数。
dxxyhpgq9#
在我的情况下,我已经从主页面切换到gh-pages,这导致我所有的组件消失,并被一个名为“static”和其他文件所取代。
git checkout -m master已帮助
9条答案
按热度按时间t5fffqht1#
从release notes for 1.6.2
@{-1}
是一种引用您所在的最后一个分支的方式。不仅在需要对象名的地方接受,而且在需要分支名的地方也接受,就像您键入了分支名一样。
例如
git branch --track mybranch @{-1}
、git merge @{-1}
和git rev-parse --symbolic-full-name @{-1}
将按预期工作。和
git checkout -
是git checkout @{-1}
的简写。若要查看先前 checkout 的列表:
i=0; while [ $? -eq 0 ]; do i=$((i+1)); echo -n "$i. "; git rev-parse --symbolic-full-name @{-$i} 2> /dev/null; done
***提示:*您可以将其作为
function
添加到.bashrc
.vlf7wbxs2#
现在最简单的方法是:
...它是以下项的别名:
如果你想知道更多关于这一点,我写了一篇完整的文章在这里:Checkout The Previous Branch In Git。
yvgpqqbh3#
Git版本
2.23
引入了git switch
命令,你可以用它来完成这个任务(以及更多)。切换到指定的分支。工作树和索引会更新以匹配该分支。所有新提交都将被添加到该分支的顶端。
在您的特定情况下,您可以执行
git switch -
返回到您之前所在的分支。您可以再次执行相同的命令返回到第一个分支。此命令不那么容易混淆,并且对初学者很友好,因为它解决了使用
git checkout
时出现的常见confusion问题。lnvxswe24#
正如@Karl所指出的和来自
git checkout
手册的:作为一种特殊情况,最后第N个分支的“@{-N}”语法 checkout 该分支(而不是分离)。您还可以指定-,它与“@{-1}"同义。
因此,
git checkout -
和git checkout @{-1}
都适用于这种情况我认为最接近的是使用
git reflog
并解析最新的moving from branch1 to branch2
和git checkout branch1
3mpgtkmj5#
我在这个问题上的想法和我以前的分支一样。我在
Mac
中使用ohmyz。下面的命令帮助了我。kjthegm66#
只是在前面的答案中添加一些细节来理解
git checkout @{-N}
的工作机制。它遍历reflog来检查 checkout 历史,所以如果你想自己实现类似的东西,你应该能够解析git reflog
的输出,寻找checkout:
行。你可以在git源代码sha1_name.c
中检查实现,特别是函数interpret_nth_prior_checkout
。vbopmzt17#
以下是Git文档中描述
git checkout -
和git checkout @{-1}
解决方案的部分内容:@{-<n>}
,例如**@{-1}
**表示“在当前分支/提交之前 checkout 的第 n 个分支/提交”。git checkout <branch>
的文档重申:“您可以使用@{-N}
语法引用使用git checkout
操作 checkout 的第N个最后分支/提交。”git checkout
的<branch>
参数,“也可以指定与”@{-1}
“同义的”-
“。”3htmauhk8#
最流行的解决方案是:
其中,N -在检出历史上向后移动的分支的步数。
dxxyhpgq9#
在我的情况下,我已经从主页面切换到gh-pages,这导致我所有的组件消失,并被一个名为“static”和其他文件所取代。
git checkout -m master已帮助