[英]GIT stashing and switching between branches issue - work from one branch appeared on the other without merging
[英]GIT :: Merging 2 branches overwrite the content in one branch with the other
我遇到了一个疯狂的问题。 我把我的整个项目放在主分支中。 早些时候,一个人正在研究这个项目,但它是在SVN。 他做了一些改变,我需要将这些改变与我的整合。 两个项目都具有相同的文件夹结构,唯一的区别是使用的VCS类型。 我做了以下
在这个阶段,如果我运行git status命令,我可以看到更改(文件被标记为已修改)我需要与我的主分支集成。 然后,
结果是我的代码在master分支中被“code_to_integrate”分支中的代码覆盖。 我失去了我的全部修改。 HEAD在c2,我也可以看到c1。 如果我使用
git reset --hard c1,
我会收回我的更改。 现在,它就像使用命令一样
git合并 - 他们的
我从合并分支(code_to_integrate)获得了整个更改,并且在合并分支(master)中丢失了更改。 发生了什么?。 这应该是直截了当的吗? 任何帮助将不胜感激。 提前致谢
问题是,你创建的code_to_integrate
分支之上的您master
分支。 事情看起来像这样:
... -> oldercommit -> oldcommit -> c1 (master, code_to_integrate)
当你将另一个人的代码提交给这个分支时,你会得到一个线性历史记录:
... -> oldercommit -> oldcommit -> c1 (master) -> c2 (code_to_integrate)
当你现在将code_to_integrate
合并到master git中时,检测到c2
比c1更新并执行了所谓的快进合并,这基本上意味着只更改master
指向c2
的commit
。 想象一下code_to_integrate
只是你自己做的一个快速分支,例如修复bug。 一旦完成,您将拥有完全相同的历史记录,快速合并将正是您想要的。
为了解决你的问题,你需要告诉git你们哪些旧提交是你和另一个人工作的最新共同祖先。 基本上你需要告诉git在哪个时间点另一个人分支你的master
。 你这样,通过检查这是最新的承诺, 无论你和其他人在你的历史,然后开始code_to_integrate
分支那里。 假设另一个人在oldercommit
,你会做一个git checkout oldercommit
接着是一个git checkout -b code_to_integrate
,应该得到这样的东西。
... -> oldercommit (code_to_integrate) -> oldcommit -> c1 (master)
一旦你提交了另一个人的版本,你会得到:
-> c2 (code_to_integrate)
/
... -> oldercommit -> oldcommit -> c1 (master)
当你现在将code_to_integrate
合并到master
,git会看到有一个不同的历史记录并进行三向合并(其中oldercommit
是mergebase),提示你解决可能出现的任何冲突,等等。这就是你想要的!
总而言之,您只是从错误的提交开始了您的code_to_integrate
分支。 在不知道mergebase是什么的情况下,git或任何其他版本控制系统无法进行合并。
编辑:如果您没有与其他人分享任何更改,因为您将代码放入git,那么您的mergebase是您历史记录中最早的提交。 以下应该做你想要的:
git checkout $(git rev-list --all | tail -n 1)
git checkout -b code_to_integrate
[ ... put the other guys code into your working directory and commit it ... ]
git checkout master
git merge code_to_integrate
第一个命令检查历史记录中最早的提交,这是您和SVN人员共有的最后一个提交。 第二个命令在最早的提交中创建code_to_integrate
分支并切换到它。 然后你将其他人的代码扔进你的工作目录并将其提交给code_to_integrate
分支。 最后,切换回master
分支并合并其他分支。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.