为什么git merge有时会删除不应该删除的更改?

时间:2011-01-21 16:53:09

标签: git git-merge

每隔一段时间,我一直在git中遇到一些奇怪的行为。当我合并到另一个对同一文件进行了无关更改的分支时,我删除了对一个分支中的文件所做的更改。

假设我从分支机构开始。以下是发生的事情的大致轮廓:

vim foo.txt
git add foo.txt
git commit

git checkout -b test
vim foo.txt
git commit -a -m added a new line to foo.txt

git checkout master
vim foo.txt
git commit -a -m made some unrelated change

git merge test

此时,我将发现我在主分支中的foo.txt中所做的更改已被删除。

我正在进行许多其他更改并在所有这些中间执行其他git操作。由于像这样的合并是git的全部内容,我觉得我可能在某些时候做错了。

有谁知道什么?

1 个答案:

答案 0 :(得分:0)

因为测试分支上的提交是最后一次并且test具有可以解析共同祖先提交的提交,所以默认行为是使用test中的新信息作为最新信息。您可以使用-s选项强制执行该行为。请参阅此链接以获取示例:http://www.kernel.org/pub/software/scm/git/docs/git-merge.html

使用工作流示例编辑

mkdir showoff_git
cd showoff_git
git init
touch file_a
echo "line 1" >> file_a
git add .
git commit -m "initial commit"
git checkout -b test
sed -i='' s/1/2/ file_a
git add .
git commit -m "bluffing"
git checkout master
git merge -s ours test