2017-04-26 7 views
0

以前のバージョンのレポをチェックアウトしたとします。下に示すように、各コミットが単純化のために数字で表されると仮定しましょう。 HEADが指し示した後にバージョンをチェックアウトするにはどうすればよいですか?私はそのSHA-1値を知らなくても、この場合には、数4をコミットし、HEADが指しているバージョンの直後のバージョンをチェックアウトする方法は?

git checkout HEAD~1 

が、どのように私は後者に取得することができますコミットによってコミット以前に取得することができます知っていますか?

1 2  3  4   5 
      HEAD 
+0

複数のコミットを3つの親として持つことができます。この場合、あなたは何をしたいですか? – Tom

+0

複数のコミットが親と同じコミットを共有する可能性があると述べました。このシナリオは、複数の支店がある場合のみ考えることができます。私が取り組んでいる現在のブランチにこの議論を限定すればどうなりますか? –

+1

Jan Krugerの答えは、あなたが得るほど良いと思います。彼が指摘しているように、いくつかの仮定が組み込まれており、これらの仮定のいずれかが成り立たなければ、予期しない動作が生じる可能性があります。コミットとブランチの関係はそれほど具体的ではないので、あなたの指定した "現在のブランチを想定する"はgitの用語ではあまり正確ではありません。 (最も顕著なのは、コミット '3'をチェックアウトした後、あなたは*ブランチにはいません)。 –

答えて

2

Gitは「未来」コミット(3がチェックアウトされたときに、4に無容易に利用可能な基準がある)を参照する方法を持っていないので、これはそれほど簡単ではありません。しかし、我々はそれに仮定の多くを焼く場合、我々はこの(わかりやすくするために避け略語)を行うためにシェルモンスターを作成することができます:あなたが現在チェックアウトされている場合にのみ動作しますのでご注意

git checkout $(git rev-list --first-parent --reverse HEAD..master | head -1) 

してくださいではありませんコミットマージの一部(マージコミットの第2の親を介してのみ到達可能)。適切なマージコミットを自動的に見つけるために大きなモンスターを作成することもできますが、専用ツールのサイズをとることになります。

+1

OPはこれを"現在のブランチ "という言葉で置きますので、追加するだけです。 「現在の支店」についてはここではあまりにも正確ではありませんが、OPが特定の支店を辿ることを意味するようにしましょう。そして、そのブランチ名( 'master'かもしれないし、そうでないかもしれない)は' HEAD..'の後に行くでしょう。 –

関連する問題