変更や新しいメッセージをコミットしない方法は?


136

どうすれば新しくできますか commitし、変更がファイルに行われていない場合は、新しいメッセージを作成しますか?

コミットのコード(SHA?)は同じになるので、これは不可能ですか?

回答:


168

これを行う正当な理由はめったにありませんが、パラメーターは--allow-empty空のコミット(ファイルが変更されていない)--allow-empty-message用であり、空のコミットメッセージとは対照的です。入力するgit help commit、オンラインドキュメントにアクセスして詳細を読むこともできます

ツリーオブジェクト(独自のハッシュを持つ)は同じですが、おそらく異なるタイムスタンプとメッセージがあり、確実に異なる親コミットがあるため、コミットは実際には異なるハッシュになります。これら3つの要素はすべて、gitのオブジェクトハッシュアルゴリズムに統合されています。


そこているあなたは(コメントの一部を取り入れた)コミット空の場合がありますいくつかの理由は:

  • 「宣言的コミット」として、ナレーションまたはドキュメンテーションを追加するため(DavidNeissを介して)、合格したテストまたはlintに関する事後のデータ(Robert Balickiを介して)を含みます。
  • git任意の変更を生成せずにコマンドをテストするには(Vaelus使用)。
  • gitoliteTatshを介して)を使用して、削除されたベアリポジトリを再作成します。
  • mattLummusを介して)ビルドツールを再トリガーするため、または(DynamiteReedを介して)個人のロギングまたはメトリックのために、新しいコミットを任意に作成するため。ただし、2度考えてみてください。ブランチ/マージ構造によっては、コミットが非常に長く存続する可能性があるため、「何もコミットしない」戦略では、一時的なワークフローアーティファクトによってチームのリポジトリが不注意に汚染され、コードリビジョンとの分離が困難になる場合があります。エフェメラルリフト。

メタデータをコミットツリーに追加する他の方法には、次のものがあります。

  • 常に特定のステータスのコミットを指す個別のブランチまたは軽量タグ(たとえば、「最後に受け入れられたコミット」または「現在のステージングコミット」)。
  • タイムスタンプ、コミッター、メッセージを記録する方法の注釈付きタグ。コミットツリー自体にエントリを追加せずに既存のコミットを指します。
  • git notes 変更可能なメモを既存の不変のコミットに関連付ける。

2
gitフローブランチモデルの追跡を始めました。あなたが作るときにdev分岐形master、その後featからすぐに枝をdevfeatから来て枝ルックスmasterまったく区別がないので枝が上コミットdevfeatの枝が来ます。devブランチを最初に作成したときの空のコミットは、ブランチとはdev独立して無期限に続くブランチであるため、ブランチを確立するのに役立ちますmaster。一般的には、コミットあなたがレイヤーとして枝を使用するときに便利だし、単一の二層を作成
初心者C

2
もう1つの理由:プッシュする前にコミットメッセージから重要なものを省略したcommit --amend場合、リモートが強制プッシュを許可しないとできません。このようにして、開発者は前のコミットに伴う重要なメッセージを見ることができます。
アンディJ

1
私はコミットをプッシュしたのでこれをやりたいが、コミットメッセージで何かを言及するのを忘れていました。私たちのコミットメッセージは問題追跡および継続的統合ソフトウェアと統合されており、コミットメッセージの内容はそれらのアプリケーションに影響を与えます。もっと良い方法はありますか?これは私の場合、最善の解決策のようです。私が想像できる唯一のことは、どういうわけか前のコミットを元に戻すことができることです。
sytech 2017

1
これを使用して、データベースをスクリプト化するpre-commitフックをトリガーしました。変更があったので、スクリプトが実行されるまで、gitはそれらを見ることができませんでした。もちろん手動で実行することもできますが、その場合はスクリプトが2回実行されます。
yoyodyn

1
githubおよびgogsとしてgitサーバーに組み込まれている問題追跡と対話する場合に非常に役立ちます。
SimonF

37

私があなたを正しく理解しているなら、あなたは空のコミットをしたいと思います。その場合、次のものが必要です。

git commit --allow-empty

35

メッセージ付きの空のコミット

git commit --allow-empty -m "Empty test commit"

空のメッセージを含む空のコミット

git commit --allow-empty --allow-empty-message

3

gitversionのようなシステムを使用している場合、この種のコミットを行うことは非常に理にかなっています。+ semver:メジャーコメントを使用して、メジャーバージョンをバンプするためのコミットを行うことができます。


3

多分より賢明な代替手段として、あなたは 注釈付きタグ(メッセージ付きの名前付きコミット)を。git tag -aオプションを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.