2016-05-21 7 views
2

今、私は再びがmaster(またはその他のブランチ)をチェックアウトせずにgitのサブモジュールにコミット前:分離HEADでコミットが許可されるのはなぜですか?

╭─[email protected] ~/some/poject/submodules/coollib ‹cbc6ecc*› 
╰─$ git commit -am"some message" 
[detached HEAD 0538b11] some message 
2 files changed, 13 insertions(+), 2 deletions(-) 

多分にgitでの作業の私の方法は、ちょうど素人ですが、私は私が今までどちらかと思いますそのコミットとチェックアウトを元に戻すmasterと再コミットまたはブランチを作成し、私がコミットしたいブランチにマージします。私に

無名のスナップショットへのコミットは、それが切り離さHEADにコミットすることが許されるのはなぜ(禁止されていない場合)は、少なくともについて警告されなければならない低レベルの手順

のように見えますか?これはいつ便利ですか?

gitさんの動作はグローバルオプションで変更できますか?

+0

side remark:gitのデタッチされたHEADモードと再び混乱から脱出する方法。しかし、どこにこのようなモードが存在するのかについては議論されていない。 – EagleRainbow

+1

離脱したHEADの輻輳を防ぐ方法については、http://stackoverflow.com/questions/37269048/how-to-prevent-commit-in-detached-headを参照してください。 – EagleRainbow

+0

この質問の答えは、これを許可する理由が本当にないことを示唆しています:)。少なくとも、(コミット前フックを使用して)分離HEADへのコミットを避けることができます。 – frans

答えて

3

同じように「なぜ」と尋ねることもできます。実際には、Gitの内部操作の多くがこれを利用しています。最も明白なのはgit rebaseで、分離HEADを取得し、コミットのコピーを開始します(対話型リベースを行う場合はgit cherry-pick、非対話型リベースを実行する場合は同等)。ほとんどの場合、これらのコマンドは他のコマンドを使用しますが、実際には対話的なrebaseはgit commitを直接実行することがあります。特に--amendフォームを使用してください。

これらのコマンドは、git commitではなくplumbingコマンドを使用する可能性があります。 (実際には、git stashgit commit-treeを使用します)

Gitも書き直すことができます。 :-)ある時点では、それはあまりにも多くの努力です。

あなたは、個人的に、コミットする前に切り離された頭にないことを確認したい場合は、自分でこれを行う小さなスクリプト作成、例えば:

$ git ci 
not committing: in detached-HEAD state 

または切り離しをチェックpre-commitフックを書きますHEADを使用して、その状態でコミットするために--no-verifyをバイパスする必要があります。 (後者は、対話型リベースでrewordに干渉します。)

は(HEADがシンボリック参照であるかどうかを確認するには、にどの HEADポイントブランチの名前を印刷し、または失敗し git symbolic-ref HEADを、使用しています。ちょうど得るために -qを追加しますシェル変数にブランチ名を書き込んだり、必要に応じてそれを破棄するには /dev/nullに書き込んでください。

+0

あなたの声明では、このような 'pre-commit'フックをかけることでリベースが中断されることを暗示していますか?それは - mmmh ...それを "かなり不幸なもの"と呼んでみよう。 – EagleRainbow

+0

コードを読むことに基づいて、実際に試してみることなく、はい。 (破損の形は、対話型のrebaseがあなたに '--no-verify'フラグをつけて強制的にコミットすることです)。試してみてください。面白い実験をするかもしれません。いくつかの詳細はGit-versionに依存するかもしれません。 – torek

+0

これはいくつかの良い点ですが、APIが期待どおりに動作している間にgitユーザーインターフェースに警告を出すのは簡単だと思います。おそらく私は私の質問を「なぜgitのユーザインターフェイスで許可するのですか?」と言い直す必要があります。 – frans

関連する問題