ブランチモデルでは--no-ff
、すべてのマージで指定する必要があるようです。空のマージでも簿記エントリを強制します。たとえば、グラフィックでは、修正プログラムから0.2にマージを実行します。これにより、マスターブランチにコミットされ、実際には実行されません。を使用して、任意のマージを実行しgit merge --no-ff hotfixes
ます。gitに対応していない管理要件のあるプロジェクトでは、それを行うのに適した方法です。 VonCは--no-ff
、そのモデルの要件をどこかでスキップした場合に回答しました 。
モデルに従い、そのように動作することを期待していなかったpush
場合:グラフィックの履歴を含むリポジトリで1.0の時点でマスターをチェックアウトし、リモートのマスターブランチにプッシュすると、プッシュが完了するとリモートはコミットM2、M4、M5、Y1-6、G1-4、R1、およびC1-3(色と垂直方向の順序に従ってコミットにラベルを付ける)があり、リモートマスターブランチはそれらすべてを参照します。
理解しておくべきことは、コミット履歴は重要ですが、参照名は重要ではなく、少なくとも「capital-I」は重要ではないということです。git push
指定された参照を完了するために必要なオブジェクトを送信しながら、ローカル参照を使用してリモート参照を更新します。
通常、リポジトリがプロジェクトの主要な開発の一部である場合は、いくつかの「中央」リポジトリの参照名を追跡しています。Gitのデフォルトのクローンは、それらのローカルリモート/オリジン/*ブランチを設定します。ただし、他の設定はまったく珍しいことではありません。あるプロジェクトのv2.1で作業しているリポジトリがある場合は、他のリポジトリのrelease-v2.1ブランチをリポジトリの「マスター」ブランチと見なすことができます。
履歴をプッシュせずにコミットの結果のみをプッシュする場合は、結果はあるが履歴がない新しいコミットを作成する必要があります。他のdvcは、さまざまな程度の嫌悪感を持ってこのように履歴を構築することを検討している人々によって構築されています。gitは、そのような選択肢をビジネスの1つとは見なしていません。それは、想像したいモデルを実装するツールを提供します(それは)。 git cherry-pick
名前付きコミットを最初の親と比較し、その差分を現在のヘッドに適用して、チェリーピックされたコミットのメッセージを使用して、新しいコミットを作成します。バニラgit rebase
は、そのようなコミットのシーケンス全体を選択します。あなたが期待していたと思う行動は何ですかgit merge --squash; git commit
行う:コミットの履歴にdiffを適用し、それらがどこから来たのかを忘れます。これを行うと、他の場所からのコミットがブランチの履歴に表示されなくなります。それは間違いなくあなたのグラフィックが伝えようとしているモデルではありません。