あるブランチから別のブランチにファイルを選択的にマージするには、次のコマンドを実行します。
git merge --no-ff --no-commit branchX
branchX現在のブランチにマージするブランチはどこにありますか。
この--no-commitオプションは、Gitによってマージされたファイルを、実際にコミットせずにステージングします。これにより、マージされたファイルを好きなように変更して、自分でコミットすることができます。
ファイルをマージする方法に応じて、次の4つのケースがあります。
1)真のマージが必要です。
この場合、Gitが自動的にマージした方法でマージされたファイルを受け入れてから、コミットします。
2)マージしたくないファイルがいくつかあります。
たとえば、現在のブランチのバージョンを保持し、マージ元のブランチのバージョンを無視したいとします。
現在のブランチのバージョンを選択するには、次のコマンドを実行します。
git checkout HEAD file1
file1これにより、現在のブランチののバージョンが取得さfile1れ、Gitによって自動マージされたものが上書きされます。
3)branchXのバージョンが必要な場合(真のマージではない場合)。
走る:
git checkout branchX file1
file1これにより、 inのバージョンが取得され、Gitによって自動マージされbranchXて上書きされます。file1
4)最後のケースは、で特定のマージのみを選択する場合ですfile1。
この場合、変更file1を直接編集し、バージョンを変更したいものに更新してからfile1、コミットすることができます。
Gitがファイルを自動的にマージできない場合、ファイルは「マージされていない」と報告され、競合を手動で解決する必要があるコピーが生成されます。
例を使ってさらに説明するためbranchXに、現在のブランチにマージするとします。
git merge --no-ff --no-commit branchX
次に、git statusコマンドを実行して、変更されたファイルのステータスを表示します。
例えば:
git status
# On branch master
# Changes to be committed:
#
#       modified:   file1
#       modified:   file2
#       modified:   file3
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      file4
#
ここfile1で、、、file2およびfile3はgitが正常に自動マージしたファイルです。
これが意味するのは、これら3つのファイルすべての変更が、master競合branchXすることなく結合されているということです。
git diff --cached;を実行すると、マージがどのように行われたかを調べることができます。
git diff --cached file1
git diff --cached file2
git diff --cached file3
いくつかのマージが望ましくないことがわかった場合は、次のことができます
- ファイルを直接編集する
 
- 保存する
 
git commit 
マージせずfile1、現在のブランチのバージョンを保持したい場合
走る
git checkout HEAD file1
マージせずfile2、バージョンのみが必要な場合branchX
走る
git checkout branchX file2
自動的にマージする場合file3は、何もしないでください。
Gitはこの時点ですでにそれをマージしています。
file4上記はGitによるマージの失敗です。これは、同じ行で発生する両方のブランチに変更があることを意味します。ここで、競合を手動で解決する必要があります。ファイルを直接編集するか、目的のブランチのバージョンのcheckoutコマンドを実行することで、マージされたものを破棄できますfile4。
最後に、忘れないでくださいgit commit。