7

每隔一段时间,我就会在 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

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

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

有谁知道什么?

4

1 回答 1

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
于 2011-01-21T16:59:15.433 回答