每隔一段时间,我一直在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的全部要点,因此我觉得在某些时候我可能做错了什么。
有人知道什么吗?
因为 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)
| 归档时间: |
|
| 查看次数: |
3783 次 |
| 最近记录: |