私cd -
はgit と同等のものが欲しいです。私がブランチmaster
にいてチェックアウトしている場合は、戻ってfoo
何かを入力できるようにgit checkout -
したいしmaster
、それをもう一度入力してに戻ることができるようにしたいと思っていfoo
ます。
このようなものは存在しますか?実装するのは難しいですか?
gc-
ため、その省略形をかましたgit checkout -
私cd -
はgit と同等のものが欲しいです。私がブランチmaster
にいてチェックアウトしている場合は、戻ってfoo
何かを入力できるようにgit checkout -
したいしmaster
、それをもう一度入力してに戻ることができるようにしたいと思っていfoo
ます。
このようなものは存在しますか?実装するのは難しいですか?
gc-
ため、その省略形をかましたgit checkout -
回答:
@{-1}
あなたがいた最後のブランチを参照する方法です。これは
、オブジェクト名が必要な場所だけでなく、ブランチ名が必要な場所でも受け入れられ、ブランチ名を入力したかのように機能します。
例えばgit branch --track mybranch @{-1}
、git merge @{-1}
と
git rev-parse --symbolic-full-name @{-1}
期待どおりに動作します。
そして
git checkout -
の省略形ですgit checkout @{-1}
。
error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
@{u}
は、現在のブランチの上流ブランチであるをよく使用します。これは、たとえばgit log @{u}..
まだプルされていない上流のコミットをリストする場合に非常に役立ちます。そして、git log ..@{u}
まだプッシュされていないローカルコミットだけの逆です。
最近これを行う最も簡単な方法は次のとおりです。
git checkout -
...これは次のエイリアスです:
git checkout @{-1}
これについて詳しく知りたい場合は、こちらの記事全体をここに書きました:Checkout The Previous Branch In Git。
for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] }
。bashでは、同等のものを書く必要があります(reflogを取得して、 ":checkout:"文字列を含む行にフィルター処理してから、ブランチ名を抽出します)。これは実際にgitが行うことです
が機能するメカニズムを理解するために、以前の回答にさらに詳細を追加するだけgit checkout @{-N}
です。reflogをたどってチェックアウト履歴を調べます。そのため、自分で同様の何かを実装したい場合はgit reflog
、checkout:
行を探して出力を解析できます。gitソースの実装sha1_name.c
、特に関数を確認できますinterpret_nth_prior_checkout
。
Gitバージョンで2.23
は、git switch
それを行うために使用できるコマンド(およびその他)が導入されました。公式ドキュメントを引用:
指定したブランチに切り替えます。作業ツリーとインデックスがブランチに一致するように更新されます。すべての新しいコミットはこのブランチの先端に追加されます。
特定のケースでgit switch -
は、以前に行っていたブランチに戻るように発行できます。同じコマンドを再度実行して、最初のブランチに戻ることができます。
PSそれはあなたがすでに(私はあなたがこの質問をしたので、それが7年をされている意味)それを行う方法を知らないということはないが、それは一般的な対処として、このコマンドはあまり初心者に混乱し、フレンドリーされ、混乱使用する場合に発生しますgit checkout
。
私は以前のブランチをチェックアウトするのと同じ考えでこの質問にたどり着きました。私はohmyzを使用していMac
ます。以下のコマンドは私を助けました。
$ gco -
$ git checkout -
gco
が短い記述方法として定義されているため、これは機能しgit checkout
ます。したがってgco -
、を呼び出すだけgit checkout -
です。
git checkout -
。フェイルセーフの更新。
以下は、Gitのドキュメントの中で、他の回答によって提供されるgit checkout -
とgit checkout @{-1}
解決策を説明する部分へのポインタです。
コマンドのGitリビジョンを指定する場合@{-<n>}
、たとえば@{-1}
、「現在のブランチの前にチェックアウトされたn番目のブランチ/コミット」を意味します。git checkout <branch>
繰り返しのドキュメント:「@{-N}
構文を使用して、git checkout
操作を使用してチェックアウトされた最後のN番目のブランチ/コミットを参照できます。」
の<branch>
引数にはgit checkout
、「 ' -
'と同義の' ' も指定できます@{-1}
。」