私が知っているのは、対話型のリベースを行い、最初にコミットしてフィックスアップすることができます。しかし、ブランチに何百ものコミットが含まれていると、非常に面倒です。1つのブランチからすべてのコミットを1つのコミットとして簡単に別のブランチに移動できますか?
もっと簡単な方法はありますか?
私が知っているのは、対話型のリベースを行い、最初にコミットしてフィックスアップすることができます。しかし、ブランチに何百ものコミットが含まれていると、非常に面倒です。1つのブランチからすべてのコミットを1つのコミットとして簡単に別のブランチに移動できますか?
もっと簡単な方法はありますか?
git merge --squash
を使用すると、ブランチにマージしながらコミットを1つに縮小することができます。ターゲット・ブランチ
$ git checkout target-branch
へ
スイッチは、単一のものにマージ、およびtarget-branch
に適用されますoriginal-branch
に
$ git merge --squash original-branch
すべてのコミットを使用します。
git cherry-pick -n
でこれを行うことができます。
git cherry-pick -n OTHER_BRANCH~100..OTHER_BRANCH
git commit -m "Merged 100 commits from OTHER_BRANCH"
git cherry-pick
-n|--no-commit
通常
git cherry-pick
コマンドが自動的に作成されます。それはあなたがコミットの任意の範囲を指定することができますので、そのアプローチはgit merge --squash
に比べて、より柔軟性がありますシーケンス コミット。このフラグは、 をコミットすることなくチェリーピックアップに必要な変更を作業ツリーとインデックスにコミットした各コミットを適用します。また、このオプションを使用すると、インデックスに がHEADコミットに一致していないことがあります。チェリーピックは、インデックスの開始状態の に対して行われます。これは、インデックスを複数列にまとめて にコミットするときに便利です。
この便利なオプションをありがとう!本当に面白いです。しかし、私は最後の文章の最後の部分を理解することはできません。その意味? –
@VictorDombrovskyその文は、 "これは複数のコミットの変更をインデックスにマージするときに便利です"と言い換えることができます。 – Leon
'git checkout -b && git reset --soft && git commit'? –
raina77ow
行番号のあるテキストエディタを使用している場合は、変更が必要な行を識別して一括置換するのは難しくありません。 –