web-dev-qa-db-ja.com

前のブランチをチェックアウトする方法はありますか?

私はgitにcd -と同等のものが欲しいのです。私がブランチmasterにいて、fooをチェックアウトした場合、masterに戻るためにgit checkout -のようなものを入力し、fooに戻るためにそれを再度入力できるようにしたいと思います。

こんなものはありますか?実装するのは難しいですか?

558
Matt Briggs

1.6.2の リリースノートから

@{-1}はあなたが最後にいたブランチを参照する方法です。これは
は、オブジェクト名が想定される場所だけでなく、ブランチ名が想定される場所でも受け入れられ、ブランチ名を入力した場合と同じように機能します。
例えば。 git branch --track mybranch @{-1}git merge @{-1}
git rev-parse --symbolic-full-name @{-1}は期待通りに動作します。

そして

git checkout -git checkout @{-1}の省略形です。

965
Karl Bielefeldt

今日これをする最も簡単な方法は:

git checkout -

...これは:の別名です。

git checkout @{-1}

git checkout minus

あなたがこれについてもっと知りたいのであれば、私はここでそれについての全体の記事を書きました: Gitの前のブランチをチェックアウトしてください

152
marcgg

@Karlがgit checkoutマニュアルから指摘しているように、

特別な場合として、最後のN番目のブランチに対する "@ { - N}"構文は、(デタッチの代わりに)そのブランチをチェックアウトします。 - を指定することもできます - これは "@ { - 1}"と同義です。

そのため、この場合はgit checkout -git checkout @{-1}の両方が機能します。

私はgit reflogを使っていて、最新のmoving from branch1 to branch2git checkout branch1を解析していると私は考えています。

26
manojlds

git checkout @{-N}が機能するメカニズムを理解するために、以前の回答にもう少し詳細を追加してください。 reflogを調べてチェックアウト履歴を調べるので、自分で似たようなものを実装したい場合はgit reflogの出力を解析してcheckout:行を探すことができるはずです。 gitのソースsha1_name.c、特に関数interpret_nth_prior_checkoutで実装をチェックすることができます。

10
ddd

私は前のブランチをチェックアウトするために同じ考えでこの質問に行きました。 Macohmyz を使っています。以下のコマンドは私を助けました。

$ gco -
$ git checkout -
3
Venkat.R

以下は、他の回答で提供されたgit checkout -およびgit checkout @{-1}ソリューションを説明するGitのドキュメントの一部へのポインターです。

  • 任意のコマンドにGitリビジョンを指定する場合、 @{-<n>}、たとえば@{-1} は「n番目のブランチ/コミットは、現在のブランチ/コミットの前にチェックアウトされています。 git checkout <branch> のドキュメントは繰り返します:「@{-N}構文を使用して、最後にチェックされたN番目のブランチ/コミットgit checkout操作を使用して出力します。」

  • <branch>の引数git checkout については、「「-」も指定できます。これは「@{-1}」と同義です。」

1
Rory O'Kane

最も人気のある解決策は以下のとおりです。

git checkout @{-N}

N - 支店の歩数がチェックアウト履歴に戻ります。

1
Jackkobec

Gitバージョン2.23にはgit switchコマンドが導入されており、これを使用して(以上)実行できます。公式ドキュメントを引用:

指定されたブランチに切り替えます。作業ツリーとインデックスは、ブランチに一致するように更新されます。すべての新しいコミットは、このブランチの先端に追加されます。

特定のケースでは、git switch -を発行して、前にいたブランチに戻ることができます。同じコマンドを再度実行して、最初のブランチに戻ることができます。

追伸まだその方法がわからないわけではありません(この質問をしてから7年が経ちました)が、このコマンドは一般的な 混乱git checkoutを使用すると発生します。

0
Mike