我遇到了一个麻烦的问题。我的整个项目都在主分支(master)中。之前有个人在这个项目上工作,但是使用的是SVN。他进行了一些更改,我需要将这些更改与我的更改集成。两个项目具有相同的文件夹结构,唯一的区别是版本控制系统的类型。我按以下步骤操作:
- 下载他的代码并删除.svn文件夹
- 创建并切换到一个新的分支"code_to_integrate"(指向我的master分支)
- 复制下载的代码并用它替换我的项目文件夹。(.git文件夹保持不变)
此时,如果我运行git status命令,我可以看到需要与我的主分支集成的更改(文件被标记为已修改)。然后,
- 在那里提交这些更改。让它的提交ID为c2
- 检出到我的主分支(提交ID为c1)
- 将其与“code_to_integrate”分支合并。
结果是我的主分支中的代码被“code_to_integrate”分支中的代码覆盖。我失去了所有的修改。HEAD在c2处,我也可以看到c1。如果我使用
git reset --hard c1,
我将恢复我的更改。现在,就像使用命令
git merge -s theirs
我获得了从合并分支(code_to_integrate)中的所有更改,并且丢失了合并分支(master)中的更改。发生了什么?这应该非常简单吧?任何帮助将不胜感激。提前感谢。
code_to_integrate
分支变基到master
上。然后将code_to_integrate
分支合并到master
上。Git 在尝试合并之前会尝试找到一个共同的提交(可能是找到一个没有你所需更改的master
中的提交)。在合并之前,我的建议是始终变基你的更改到你想要合并的分支上。 - Shyam Kgit init
、git add .
、git commit
操作?我需要知道您的git repo与同事的SVN repo之间的关系。我假设该项目始于SVN,最终转换为git,但是具体是如何完成的呢? - Jarl