git merge后不合并与产生冲突,而是直接替换掉。

1.正式环境有仓库,但是当时同事为了方便,直接打了个包再测试环境进行开发了,现在开发完,新开发的这个部分没有纳入版本库。不知道如何合并。

2.我现在基于dev分支,创建了一个new的分支,并将之前没有纳入版本库的文件,直接替换掉new分支下的文件,并add commit。

3.我现在又基于dev分支,又创建了一个dev2的分支,切换到dev2下,merge new分支,发现merge过程中文件并没有合并与产生冲突,而是删除了dev2下的文件,新建了new分支下的那些文件。

劳烦大家如果遇到类似的问题,请指点下。谢谢!

阅读 12.1k
3 个回答

两个问题。

  1. 你说的 “新开发的部分” 指的是哪个部分?

  2. 你现在需要把 dev2 变成什么样?


根据评论更新

         C     new
        /
   A - B       dev
        \
         D     dev2

C 表示替换那些文件的操作。你现在要在 dev2 上重现这个操作。

git checkout dev2,然后有两个方法,取决于你要把 C 放到哪儿。

  1. git rebase origin/new。这会在 dev2 上得到 A - B - C' - D'

  2. git cherry-pick C。这会在 dev2 上得到 A - B - D - C'

可以试试git cherry-pick命令,可以把某个commit合入到某个分支。

git merge 实际会把你当前 dev2分支 最后的工作节点,new分支 最后的节点和他们共同的父节点做一次三方合并,new分支 相较于他们的共同节点相当于变更了全部文件,而 dev2分支 并没有变化,所以 git 会选择自动
merge 替换掉 dev2 上的文件

按照你的说法,你的同事应该是只调整了部分功能,可以考虑是用 git difftool 来手动合并两个分支

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题