11

私はローカル ブランチを持っており、プル リクエストで git-flow を使用しており、PR フィードバックを受け取った後、いくつかのコミットをスカッシュしようとしています。

すべてのコミット (PR などから) を同じブランチにまとめるにはどうすればよいですか?

次のようなものになると思います。

git checkout master                    # For master
git pull                               # Get all branches up-to-date
git checkout feature1                  # Checkout the branch
git checkout -b feature1_squash        # Make a copy of the branch
git branch -D feature1                 # Delete original branch
git checkout master                    # (?) Branch off latest master for safety
git checkout -b feature1               # Make new (empty) original branch
git merge --squash feature1_squash     # Merge with squash into it
git push -f feature1                   # Push, force will be required

確信はないけど。
このように多くの手順があるため、関数を使用してすべてを結び付け、ブランチ名をパラメーターとして渡すだけでもよいようです。もちろん、自動化するということは、エラー、例外、エッジケースなどを確実に処理することを意味します。

インタラクティブなリベースは使いたくありません。なぜなら、私がトレーニングしている初心者にとって正しく理解するのは少し難しいからです。また、コミットの数を知る必要はありません。このブランチに存在するすべてのコミットを実行したいだけです。

4

3 に答える 3

6

VonC からの答えはほぼそこにあります。しかし、コミットを 3 つ戻したいと考えるのは難しいことです。

代わりに使用する必要がありますmerge-base

git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit

メッセージを編集します(または代わりに git commit -m を使用します)

そのブランチにいる場合は、HEAD を使用できます。マスターからブランチしたと仮定すると、コマンドは (ローカル マスターが古くなっている可能性があるため、origin/master を使用)

git reset --soft $(git merge-base HEAD origin/master)
git commit

どこから分岐したか覚えていない場合は、PR をマージして戻す場所が正しい可能性があります。

于 2015-12-09T20:33:36.907 に答える