我正在开发一个项目,将源代码作为压缩存档发送给我。目前,它在1.0版本中,我在我的Git存储库中有一系列补丁。昨天,我收到了源码的第2版,我需要升级。我难以合并新代码,而没有删除我修补后的代码。它忽略了我的更改而没有给我机会进行合并。
我试图合并/改组代码是徒劳的,但它失败了。我一直试图在未经修改的版本1.0和我的修改之间一次拼接版本2.0(订单?),以便我的所有修改提交都重播到版本2:
我尝试使用rebase,它给了我同样的问题。我经常感到非常沮丧和困惑,我只是吹灭我的存储库并再次克隆它。我似乎无法控制Git如何合并。它是否在文件上使用日期?它是基于合并的方向吗?如果是这样,什么方向意味着什么?还有谁是“他们的”和“我们的”?
ASIDE : Git是如此令人困惑和沮丧,以至于我无法完成任务2周,试图抓住令人难以置信的困难产品。我害怕编程,因为我不得不反对它。根据我的经验,Git比我用过的任何开发工具或语言都难以理解。相比之下,它使C ++看起来像BASIC。 Git觉得我使用的是原始源代码控制API而不是打包产品。我已经尝试过使用各种各样的图形用户界面,它们都是薄薄的橱窗,可以吞下稀粥。
答案 0 :(得分:2)
这个食谱应该有效:
release-2.0
您现在拥有一个包含两个分支的存储库。在这些分支的提示,您有两个版本。
master
release-2.0
这可能会给你带来很多冲突。尝试尽可能多地解决它们,但可能无法解决所有问题。这里的问题是你尝试合并两个以不可预测的方式发生变化的事情,所以git真的无法帮到你。人们在没有告诉git的情况下添加,删除和重命名文件,所以您期望什么?
如果出现问题,请使用git reset --merge
撤消合并(无需再次创建第二个分支)。注意:重置仅在提交合并之前有效。
如果结果太多,你必须手动合并。这意味着:
在git merge --strategy ours
签出后, master
。这将创建一个新的回购,其内容为master
但认为 master
和release-2.0
已合并,但实际上并未发生任何事情。
这对你没什么帮助,但现在Git看到的文件路径与“这是同一个文件”相同。然后,您可以查看历史记录,比较内容并手动合并它们。
将来,请确保参与项目的每个人都使用Git,以便正确记录所有更改。没有这些信息,世界上没有任何工具可以进行适当的合并。
答案 1 :(得分:1)
在我看来,您的用例接近http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
中描述的修补程序方案(如果您将版本2.0视为修补程序)检查以下数字