2

私には、6つのコミットがあり、コミットCから派生したブランチmybranchがあります。これもコミットCに基づいて、mybranchからのすべてのコミットを効果的に含み、1つのコミットに押しつぶされた新しいブランチを作成したいと思います。これを行う最も簡単な方法は何ですか?

「git-pushする前にスカッシュする」というマントラのため、これを行う必要があります。新しいブランチについては、リモートサーバーにプッシュされた履歴にmybranchについて言及したくありません。プッシュに使用されるまったく新しいブランチを作成したい理由は、参照用にすべてのコミットをmybranchに保持したいからです。

4

1 に答える 1

6

押しつぶされたコミットのみをプッシュするのはなぜですか?それはクレイジーに聞こえます(そして間違っています)。

しかし、あなたの質問に答えるために:

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'
于 2011-08-31T21:44:37.300 に答える