如何在 git 中合并两个分支,同时保留必要的来自分支的文件?
合并两个分支时,如果一个文件在一个分支中被删除,而在另一个分支中没有被删除,则该文件最终将被删除。
例如:
- 当您创建新分支时,master 中存在一个文件
- 您从 master 中删除该文件,因为我们还不需要它
- 您在分支中进行更改以添加功能,这依赖于现有的文件
-
你在 master 中修复了错误(不能丢弃)
- 有一天你合并了,文件就消失了!
如何重现:
-
使用一个文件创建一个 git 存储库。
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"
-
在branchA中进行任何不触及已删除文件的更改(必须保持不变以避免冲突)
git checkout branchA
touch something.txt
git add .
git commit -m "some branch changes"
从这里开始,我发现合并这两个分支的任何方法都会删除 test.txt 文件。假设我们是依赖于文件 for branchA
, 这是个大问题。
失败的例子:
Merge 1
git checkout branchA
git merge master
ls test.txt
Merge 2
git checkout master
git merge branchA
ls test.txt
Rebase 1
git checkout branchA
git rebase master
ls test.txt
这是一个有趣的问题。因为你之后删除了该文件BranchA
被创建,然后正在合并master
into BranchA
,我不确定 Git 如何能够意识到存在冲突。
错误合并后,您可以撤消,然后重新合并,但添加回文件:
git checkout HEAD@{1} .
git merge --no-commit master
git checkout master test.txt
git add test.txt
git commit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)