当合并两个分支时,如果有一个文件在一个分支中被删除,而在另一个分支中没有被删除,那么这个文件最终也会被删除。
例如:
- 当你创建一个新分支时,主分支中存在一个文件。 - 由于我们还不需要它,你从主分支中删除了该文件。 - 在分支中进行更改以添加一个功能,这个功能依赖于该文件的存在。 - 在主分支中进行错误修复(不能被丢弃)。 - 在某一天进行合并,结果该文件消失了!
如何重现:
1.创建一个带有一个文件的 Git 存储库。
git init
echo "test" > test.txt
git add .
git commit -m "initial commit"
创建一个分支
git branch branchA
删除主分支中的文件
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文件。假设我们对branchA
依赖这个文件,那么这是一个很大的问题。
失败的示例:
合并1
git checkout branchA
git merge master
ls test.txt
合并2git checkout master
git merge branchA
ls test.txt
变基 1
git checkout branchA
git rebase master
ls test.txt