web-dev-qa-db-ja.com

HEADを意図的に切り離すにはどうすればよいですか?

私が行った場合 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」状態を作成したいと思います。それ、どうやったら出来るの?

42
Russell Silva

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」セクションを参照 )、インデックスとツリーを更新すると、記録された状態になりますコミットとローカルの変更。

  1. <commit>引数がブランチ名の場合、--detachオプションを使用して、ブランチの先端でHEADをデタッチできます(git checkout <branch>は、デタッチせずにそのブランチをチェックアウトしますHEAD)。

  2. <branch>を省略すると、現在のブランチの先端でHEADがデタッチされます

最後のポイントは、現在のブランチに対して正確に何をしたいかです。

git checkout --detach
39
VonC

このコマンドは、指定されたブランチ名(この場合はマスター)から切り離されたヘッド状態を作成します。

git checkout master^0

コミットハッシュをチェックアウトすると、^0が不要な、分離されたヘッド状態も自動的に作成されます。

git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0

そしてもちろん、より短いハッシュも:

git checkout 823112f
10
platforms