GIT 如何从另一分支合并特定的文件
是否遇到过这种情景:
您在一个分支上工作,发现该分支上的某些文件实现的功能已经在其他分支上实现了
但因为这两个分支实现不同的功能,因此不能进行简单的合并工作,但您又不想重复其他已经完成的工作
以下操作可以解决该问题:
处理流程这样的:
- 先检验当前分支与要合并分支通用文件的差异(要合并的分支必须要全部commit)
- 拉出要“合并某分支文件有差异”的所有文件(会覆盖当前分支的文件,在提交前请手动合并差异文件) git checkout 分支名称 多个指定的文件名
- 添加并commit到当前分支 git commit -a -m '注释 合并其他分支的某些文件 和合并分支提交时的说明信息'
F:\Test>git init #初始化 Initialized empty Git repository in F:/Test/.git/ F:\Test>git add . #添加文件 F:\Test>git commit -m 'init' #提交 [master (root-commit) 0b9520a] 'init' 2 files changed, 4 insertions(+) create mode 100644 dev.txt create mode 100644 test.txt F:\Test>git checkout -b dev --新建并切换分支 Switched to a new branch 'dev' F:\Test>git diff #更改文件,比较文件差异 WARNING: terminal is not fully functional diff --git a/dev.txt b/dev.txt index d62bb90..a21f2e9 100644 --- a/dev.txt +++ b/dev.txt @@ -1,2 +1,5 @@ init -dev-edit \ No newline at end of file +dev-edit + + +dev-edit-2015-08-05 \ No newline at end of file F:\Test>git commit -a -m 'edit-dev' #提交 [dev 9f224fd] 'edit-dev' 1 file changed, 4 insertions(+), 1 deletion(-) F:\Test>git checkout master #切换到主分支 Switched to branch 'master' F:\Test>git diff #更改文件,并对比差异 WARNING: terminal is not fully functional diff --git a/dev.txt b/dev.txt index d62bb90..719fd72 100644 --- a/dev.txt +++ b/dev.txt @@ -1,2 +1,4 @@ init -dev-edit \ No newline at end of file +dev-edit + +edt-master-2018-08-05 \ No newline at end of file F:\Test>git commit -a -m 'edit-master-dev' #提交并保存已更改的文件 [master dbeec1c] 'edit-master-dev' 1 file changed, 3 insertions(+), 1 deletion(-) F:\Test>git status On branch master nothing to commit, working directory clean F:\Test>git checkout dev dev.txt #在master中合并 并覆盖dev分支中的dev.txt文件 F:\Test>git status #当前master分支状态,因为dev.txt是直接从dev分支直接覆盖而来,所以可能需要手动合并冲突 On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: dev.txt F:\Test>git diff WARNING: terminal is not fully functional - (press RETURN) F:\Test> F:\Test>git diff dev.txt #查看dev.txt跟当前分支的差异,因为已经提交到暂存区,所以这里没有显示出差异 WARNING: terminal is not fully functional - (press RETURN) F:\Test>git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: dev.txt F:\Test>git citool #使用Gui查看差异
使用"checkout 文件"合并其他分支的文件会覆盖当前分支的文件,所以在提交之前必须手动合并差异
参考: