あるブランチから別のブランチにファイルを選択的にマージするには、次を実行します。
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がファイルを自動的にマージできない場合、Gitはファイルを「unmerged」として報告し、競合を手動で解決する必要があるコピーを生成します。
例でさらに説明するため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が正常に自動マージしたファイルです。
これが意味することはmaster、branchX、すべてのこれら3つのファイルが競合することなく、一緒に組み合わされているため。
を実行すると、マージがどのように行われたかを確認でき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によるマージの失敗です。これは、同じ行で発生する両方の分岐に変更があることを意味します。ここで競合を手動で解決する必要があります。マージしたファイルは、ファイルを直接編集するか、ブランチにしたいバージョンのチェックアウトコマンドを実行して破棄できますfile4。
最後に、を忘れないでくださいgit commit。