私が行った場合 git checkout HEAD^
、私はこれを得ます:
$ git checkout HEAD^
Note: checking out 'HEAD^'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at...
$
ベテランのgitユーザーはおそらくこれに非常に精通しています。しかし、もし私がgit checkout HEAD
、 何も起こりません:
$ git checkout HEAD
$
現在のブランチの先頭で、コミットの「デタッチされたHEAD」状態を作成したいと思います。それ、どうやったら出来るの?
Git 1.7.5(2011年4月)以降、git checkout --detach
コマンドを使用できます。
参照 コミット326696
checkout
:「--detach
」の同義語git checkout foo^{commit}
を紹介たとえば、一時的なマージを行うときにこれを使用して、2つのトピックがうまく機能することをテストできます。
Commit 8ced1aa (git 1.7.11.3、2012年7月)は、unbornブランチで--detach
を許可しないため、null HEAD
で失敗しません:
git checkout --Orphan foo
git checkout --detach
git symbolic-ref HEAD
次のgit 1.8.4.2または1.8.5(2013年第4四半期)のみが構文を明確にします。 commit 26776c9 を参照してください:
このケースを2つの構文形式に分け、「説明」セクションでこの使用法を示す方法を模倣します。
明確にするために、デタッチHEAD
atへのコミットに名前を付ける構文を説明するテキストも更新します。
'git checkout' [--detach] <commit>::
<commit>
の上で動作するように準備し、HEAD
をデタッチして( 「DETACHED HEAD」セクションを参照 )、インデックスとツリーを更新すると、記録された状態になりますコミットとローカルの変更。
<commit>
引数がブランチ名の場合、--detach
オプションを使用して、ブランチの先端でHEAD
をデタッチできます(git checkout <branch>
は、デタッチせずにそのブランチをチェックアウトしますHEAD
)。
<branch>
を省略すると、現在のブランチの先端でHEAD
がデタッチされます。
最後のポイントは、現在のブランチに対して正確に何をしたいかです。
git checkout --detach
このコマンドは、指定されたブランチ名(この場合はマスター)から切り離されたヘッド状態を作成します。
git checkout master^0
コミットハッシュをチェックアウトすると、^0
が不要な、分離されたヘッド状態も自動的に作成されます。
git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0
そしてもちろん、より短いハッシュも:
git checkout 823112f