gitで分離ヘッドにコミットするのはなぜですか?それを無効にすることができます事前コミットフックはありますか?目的は何ですか?多くの新しい開発者がこれを行い、私はそれを無効にする方法を見つけたいと思います。分離HEADでのコミットを防ぐ方法
答えて
これはローカルgit pre-commit
フックによってのみ防止できます。開発者はそれを作成する必要があります。次の内容のyour-local-project/.git/hooks/pre-commit
ファイルを追加してください。
#!/bin/sh
if ! git symbolic-ref HEAD &> /dev/null; then
echo "You are in a detached head state! Commit has been blocked. (Use --no-verify to bypass this check.)"
exit 1
fi
実行可能であることを確認してください。 Credits go to svachalek
なぜ、gitは分離されたHEADでコミットを防止する必要がありますか? Detached HEADは、作業中のリポジトリの状態へのポインタがないことを意味します。あなたがしていることをあなたが知っていることを前提としています。
あなたのチームの多くの開発者がこの状態になる理由を調査したいと思いますか?多分彼らはいくつかの奇妙な作業を適用するでしょうか?
git checkout $commit-sha1
は、取り外したHEADにつながる可能性があります。それでgit checkout FETCH_HEAD
もそうです。切り離されたHEADは、名前のないブランチと見なすことができます。それがあなたを混乱させないならば、あなたはそれを無視することができます。 @fraczが言ったように、あなたはpre-commit
でそれを防ぐことができます。 git checkout -b some_name
という名前のブランチにすることもできます。 A post-checkout
フックを使用すると、切り離されたHEAD状態を検出して分岐することができます。
+1 'post-checkout'フックでのブランチ作成のアイデア。しかし、ランダムな名前のブランチを作成しなければなりません。そのブランチは時間の経過とともに大きな混乱を招きます。 – fracz
@fraczはい、ランダムブランチ名が実際問題です。我々は、適切な名前を見つけるためにいくつかの論理を使用することができますが、対照的に、それはまだ少し面倒です。だから、それを無視するか、根本的な原因を見つけて事前に防止してください。私が知っているように、 'repo start'がない' repo sync'は、Repoが使用されている場合、HEAD状態を解除することもあります。 – ElpieKay
'post-commit'フックでブランチを作成すると、実際に何かをコミットしたくないときにブランチを作成することがなくなります。 https://gist.github.com/ben-cohen/316f89c763e9d8a027335261a44c4954を参照してください。 –
Gitはこれを多くの操作に内部的に使用します。分離されたHEADモードは、(1つの、単一の、特別な)匿名ブランチであなたを取得し、匿名ブランチには後で名前を付けることができます。
これは、たとえば、git rebase
がコミットを元のチェーンから新しいチェーンにコピーする方法です。最初に、この切り離されたHEADモードを使用して、--onto
ターゲットコミット(がデフォルトで<upstream>
)をチェックします。次にコピーするコミットごとにコミットをコピーします(git cherry-pick
またはこれと同等のもの:対話型対非対話型のリベースによって詳細が異なります)。最後に、既存のブランチラベルを移動して、最後にコピーされたコミットを指すようにします。
- 1. Git:Rebase中のコミットを防ぐ
- 2. 分離HEADでコミットが許可されるのはなぜですか?
- 3. gitブランチがさらにコミット/マージするのを防ぐ方法
- 4. gamemakerオブジェクトがトレーサから離れるのを防ぐ方法
- 5. 各コミット後にtravisジョブを防ぐ方法は?
- 6. WKWebViewがコミットするのを防ぐ
- 7. Rコンソール(Mac)で余分な改行を防ぐ方法
- 8. スレッドスターベートを防ぐ方法
- 9. セッションを防ぐ方法
- 10. セッションタイムアウトを防ぐ方法
- 11. HSTSを防ぐ方法は?
- 12. Ajaxキャッシングを防ぐ方法
- 13. enumコンストラクタを防ぐ方法
- 14. TFSでのマージを防ぐ方法
- 15. hammer.jsでデフォルトのタッチを防ぐ方法
- 16. TCPDFブロック内のページ区切りを防ぐ方法(分割コンテンツ)?
- 17. JAX-WS Webメソッドの余分なタグを防ぐ方法
- 18. mvcでjsonハイジャックを防ぐ方法
- 19. jspでXSSを防ぐ方法は?
- 20. ZingChartでリセットタイムアウトを防ぐ方法
- 21. Androidでマルチデックスを防ぐ方法
- 22. RealmとUICollectionViewでNSInternalInconsistencyExceptionを防ぐ方法
- 23. Pythonでnullsを防ぐ方法
- 24. Git - 特定のフォルダで偶発的なコミットを防ぐ
- 25. Box2Dのセンサオブジェクトのトンネリングを防ぐ方法
- 26. tsqlの詐欺を防ぐ方法は?
- 27. ASP.netの無限ループを防ぐ方法
- 28. jqueryのタブを防ぐ方法?
- 29. 画像の移動を防ぐ方法
- 30. divコンテンツのオーバーフローを防ぐ方法
これにより、ヘッドの切り離しを防ぐことができますが、(インタラクティブ)リベース操作にも影響します。内部的には、リベースはデタッチされたヘッドを使用してコミットを再生します。 – ad22
リベースを許可するには、[検出する](http://stackoverflow.com/questions/3921409/how-to-know-if-there-is-a-git-rebase-in-progress)が必要です。しかし、インタラクティブなリベースを行い、同時にHEADを分離してコミットするのを恐れている開発者はほとんど想像できません。 – fracz