プッシュ時にいくつかのコミットを非公開にしたいので、それらをリモート側で 1 つの大きなコミットにバンドルしたいと考えています。ローカルでは、それらは分割されたままにする必要があります。
ユースケースは、たとえば静的ブログでの作業です。ドラフトの手順はローカルでコミットして追跡する必要がありますが、プッシュ時にはリリース済みのバージョンのみを公開したいと考えています。
git や mercurial での解決策が受け入れられます。
Mercurial 2.1 以降では、フェーズを使用して変更セットを「秘密」としてマークできます。これにより、すべての送信変更セットが秘密としてマークされます。
$ hg phase -f --secret "outgoing()"
秘密の変更セットはデフォルトではプッシュまたはプルされないため、このコマンドの後、発信する変更セットはありません — 必要に応じて調整して、適切な変更セットを秘密としてマークします。
また、変更セットをリモート リポジトリ内の 1 つの大きなコミットとして使用することもお勧めします。そのために、Mercurial 2.3 以降にバンドルされているhistedit 拡張機能を使用できます。--keep
元のチェンジセットを折りたたんだときに元のチェンジセットが削除されないように、フラグを使用します。
アイデアは、専用のブランチでコミットを行うことですが、1 つの大きなコミットが生成されるため、git merge --squash
それらmaster
(または、プッシュする予定の他のパブリック ブランチ) に対して行います。次に、リモート リポジトリ
をプッシュします。master
「 git では、 と の違いは何ですか?」 を参照してくださいmerge --squash
rebase
。