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

dwh*_*dwh 5 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
Run Code Online (Sandbox Code Playgroud)

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

在所有这些过程中,我将进行许多其他更改并执行其他git操作。由于这样的合并是git的全部要点,因此我觉得在某些时候我可能做错了什么。

有人知道什么吗?

Jed*_*der 1

因为 test 分支上的提交是最后进行的,并且 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
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个,但我并不完全相信——这不会因为默默地忽略我正在合并的分支中的更改而导致问题吗?如果我的速度很慢,我深表歉意,但如果您能解释一下您关于“共同祖先提交”的观点,我将非常感激。在过去的几个小时里,我一直在谷歌搜索并试图重现这个问题,但我认为我仍然错过了发生的事情。 (2认同)