【发布时间】:2010-11-27 07:36:02
【问题描述】:
如何在 git 中合并两个分支,同时保留一个分支中的必要文件?
合并两个分支时,如果一个文件在一个分支中被删除而不在另一个分支中,则该文件最终被删除。
例如:
- 创建新分支时,master 中存在文件
- 您从 master 中删除该文件,因为我们(还)不需要它
- 您在分支中进行更改以添加一项功能,该功能依赖于现有文件
- 您在 master 中进行错误修复(不能丢弃)
- 有一天你合并,文件不见了!
如何复制:
-
用一个文件创建一个 git repo。
git init echo "test" > test.txt git add . git commit -m "initial commit" -
创建一个分支
git branch branchA -
删除master中的文件
git rm test.txt git commit -m "removed file from master" -
在不涉及已删除文件的分支A 中进行任何更改(必须保持不变以避免冲突)
git checkout branchA touch something.txt git add . git commit -m "some branch changes"
从这里,我找到合并这两个分支的任何方式,都会删除 test.txt 文件。假设我们 依赖文件 获取 branchA,这是一个大问题。
失败的例子:
合并 1
git checkout branchA
git merge master
ls test.txt
合并2
git checkout master
git merge branchA
ls test.txt
变基 1
git checkout branchA
git rebase master
ls test.txt
【问题讨论】:
-
我相信您可以通过在合并之前从最新的 master 重新设置 branchA(只要它不是公开的)来解决这个问题。交互式变基将使您有机会告诉 git 您绝对想要该文件,然后合并应该顺利进行。