別のブランチで行った変更(コミット)を、取り込むことをマージといいます。 Git のマージには、以下のような種類があります。
直接マージはもっとも一般的なマージで、別のブランチで実行されたコミットを、あたかも現在のブランチに対してコミットされたかのように見えるようにマージします。 通常は、派生先のブランチでの変更を、派生元のブランチにすべて取り込む場合に使用します。
$ git merge mybranch
Updating e61beb0..dd06978
Fast-forward
aaa.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
普通にマージを実行した場合は、すべてのコミットが反映された状態になるので、git commit
を実行する必要はありません。
git merge
コマンドを実行するときに、--squash
オプションを指定すると、ブランチ先でのすべてのコミットを1つにまとめて、現在チェックアウトしているブランチにステージングすることができます。
$ git merge --squash mybranch
Updating dd06978..6d10a56
Fast-forward
Squash commit -- not updating HEAD
aaa.txt | 3 ++-
bbb.txt | 2 ++
2 files changed, 4 insertions(+), 1 deletions(-)
create mode 100644 bbb.txt
通常のマージの場合とは異なり、スカッシュマージした場合は、ただちにコミットが実行されるのではなく、変更がステージングされた状態になります。 実際に変更を反映するにはコミットを実行する必要があります。
$ git commit -m "Some comment"
別ブランチで行われた特定のコミットだけを取り込みたい場合は、git cherry-pick
コマンドを使用します。
どのコミットを取り込 むかを支持するために、git log
で表示されるコミットの ID を引数で指定します。
コミット ID はブランチをまたいだ場合でも一意なので、取り込み先のブランチ名を指定する必要はありません。
$ git cherry-pick 21358de
Finished one cherry-pick.
上記のコマンドを実行すると、チェックアウトしているブランチに対して、ただちにコミットが実行されます。
コミットを実行せずに、ただステージングするだけにしたい場合は、-n
オプションを付けて git cherry-pick
を実行します。
$ git cherry-pick -n 21358de
Finished one cherry-pick.
上記コマンドを実行した後で git status
を実行すれば、次回のコミット対象として認識されていることを確認できます。