押しつぶされたコミットのみをプッシュするのはなぜですか?それはクレイジーに聞こえます(そして間違っています)。
しかし、あなたの質問に答えるために:
git checkout -b newbranch # checkout new branch
git reset --soft C # move to commit C
git commit -m 'squashed commit'
もう1つの可能性はrebase -i
、すべてのコミットを1つのコミットに押しつぶす/修正するために使用することです。
git checkout -b newbranch
git rebase -i C # now, replace every 'pick' with 'fixup'/'squash' except the first one
また興味深いのはgit merge --squash
:
実際のマージが発生したかのように作業ツリーとインデックスの状態を生成します(マージ情報を除く)が、実際にコミットしたり、HEADを移動したり、$ GIT_DIR / MERGE_HEADを記録して、次のgitcommitコマンドでマージを作成したりしないでください。専念。これにより、現在のブランチの上に単一のコミットを作成できます。その効果は、別のブランチ(タコの場合はそれ以上)をマージするのと同じです。
git checkout -b newbranch C # create newbranch at commit C
git merge --squash mybranch
git commit -m 'squashed commit'