要有选择地将文件从一个分支合并到另一个分支,请运行
git merge --no-ff --no-commit branchX
其中branchX是要从中合并到当前分支的分支。
--no commit选项将暂存已被Git合并的文件,而无需实际提交。这将使您有机会根据需要修改合并的文件,然后自己提交。
根据您希望合并文件的方式,有四种情况:
1) 你想要真正的合并。
在这种情况下,您接受合并文件的方式是Git自动合并文件,然后提交它们。
2) 有些文件您不想合并。
例如,您希望保留当前分支中的版本,而忽略要从中合并的分支的版本。
要选择当前分支中的版本,请运行:
git checkout HEAD file1
这将在当前分支中检索file1的版本,并覆盖Git自动合并的file1。
3) 如果您希望branchX中的版本(而不是真正的合并)。
Run:
git checkout branchX file1
这将在branchX中检索file1的版本,并覆盖Git自动合并的file1。
4) 最后一种情况是,如果只选择文件1中的特定合并。
在这种情况下,您可以直接编辑修改后的file1,将其更新为您希望的file1版本,然后提交。
如果Git无法自动合并文件,它将报告该文件为“未合并”,并生成一个副本,您需要手动解决冲突。
为了用示例进一步解释,假设您希望将branchX合并到当前分支中:
git merge --no-ff --no-commit branchX
然后运行gitstatus命令查看修改文件的状态。
例如:
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中的更改都已合并在一起,没有任何冲突。
您可以通过运行gitdiff-cached来检查合并是如何完成的;
git diff --cached file1
git diff --cached file2
git diff --cached file3
如果您发现不需要合并,那么可以
直接编辑文件拯救git提交
如果您不想合并文件1并希望在当前分支中保留版本
Run
git checkout HEAD file1
如果您不想合并file2,只想在branchX中使用版本
Run
git checkout branchX file2
如果希望自动合并file3,请不要执行任何操作。
Git目前已经将其合并。
上面的文件4是Git失败的合并。这意味着在同一行上发生的两个分支中都有更改。这是您需要手动解决冲突的地方。您可以通过直接编辑文件或为希望file4成为的分支中的版本运行签出命令来放弃合并的文件。
最后,不要忘记gitcommit。