私は機能ブランチに取り組んでいます。
したがって、現在のコミット履歴は次のようになります。現在から古いものへ:
機能ブランチをマスターにマージする前に、3回のコミットを1回にスカッシュするにはどうすればよいですか?
rebase -i
の親(つまり、分岐元のmaster
のコミット)で始まるcommit 2
を使用できます。マージコミットに到達すると、競合を再解決する必要があります。 。
履歴が次のように見える場合
* D commit 3 (HEAD)
* M merge
/|
| * C commit 2
* | B commit on master
|/
* A (master)
git rebase -i A
で始めます。 master
とyour_branch
の両方を含むコミットのリストが表示されますが、マージコミットは表示されません。 pick
最初のもの(タイミングに応じてB
またはC
、残りはsquash
)。
私の場合、私はいくつかのコミットを持つブランチで作業を開始し、メイン/ソースブランチとマージし、さらにコミットし、すべてのコミットをつぶしたいのですが、マージコミットのためにエラーが発生し続けました:
エラー:コミットはマージですが、-mオプションが指定されていません。
-> C1-> C2-> M(ソースブランチとマージ)-> C3-> C4
おそらくより良い方法があります(そして、私は学習を楽しみにしています)が、多くの読み取りと試行錯誤の後にやったことは、参照用のコピーブランチを作成し、現在のブランチをC1
リセット-ハード(C1ハッシュ)
次に、C2、C3、C4をチェリーピッキングし、次に押しつぶし、リベースします...
M-> C
(ソースでリベースされたコミットが1つだけ!)
これが同じ問題を抱えている他の人の助けになることを願っています。