2016-07-23 13 views
1

私が知っているのは、対話型のリベースを行い、最初にコミットしてフィックスアップすることができます。しかし、ブランチに何百ものコミットが含まれていると、非常に面倒です。1つのブランチからすべてのコミットを1つのコミットとして簡単に別のブランチに移動できますか?

もっと簡単な方法はありますか?

+1

'git checkout -b && git reset --soft && git commit'? – raina77ow

+0

行番号のあるテキストエディタを使用している場合は、変更が必要な行を識別して一括置換するのは難しくありません。 –

答えて

4

git merge --squashを使用すると、ブランチにマージしながらコミットを1つに縮小することができます。ターゲット・ブランチ

$ git checkout target-branch 

スイッチは、単一のものにマージ、およびtarget-branchに適用されますoriginal-branch

$ git merge --squash original-branch 

すべてのコミットを使用します。

4

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コミットに一致していないことがあります。チェリーピックは、インデックスの開始状態の に対して行われます。

これは、インデックスを複数列にまとめて にコミットするときに便利です。

+0

この便利なオプションをありがとう!本当に面白いです。しかし、私は最後の文章の最後の部分を理解することはできません。その意味? –

+0

@VictorDombrovskyその文は、 "これは複数のコミットの変更をインデックスにマージするときに便利です"と言い換えることができます。 – Leon

関連する問題