要有选择地将文件从一个分支合并到另一个分支,请运行
git merge --no-ff --no-commit branchX
branchX
您要合并到当前分支的分支在哪里?
该--no-commit
选项将暂存由Git合并的文件,而不实际提交它们。这将使您有机会修改所需的合并文件,然后自己提交。
根据您要合并文件的方式,有四种情况:
1)您想要一个真正的合并。
在这种情况下,您将接受合并文件,就像Git自动合并它们然后提交它们一样。
2)有些文件您不想合并。
例如,您要保留当前分支中的版本,而忽略要合并的分支中的版本。
要在当前分支中选择版本,请运行:
git checkout HEAD file1
这将检索file1
当前分支中的版本,并覆盖file1
由Git自动合并的版本。
3)如果要在branchX中使用版本(而不是真正的合并)。
跑:
git checkout branchX file1
这将检索的版本file1
中branchX
并覆盖file1
自动合并的Git的。
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文件已成功自动合并。
这意味着,这三个文件中的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失败的合并。这意味着同一行上的两个分支都发生变化。这是您需要手动解决冲突的地方。您可以通过直接编辑文件或在要file4
成为的分支中运行该版本的checkout命令来放弃合并。
最后,不要忘了git commit
。