如何合并并保留我的更改?

时间:2014-03-28 15:52:48

标签: git merge

我正在开发一个项目,将源代码作为压缩存档发送给我。目前,它在1.0版本中,我在我的Git存储库中有一系列补丁。昨天,我收到了源码的第2版,我需要升级。我难以合并新代码,而没有删除我修补后的代码。它忽略了我的更改而没有给我机会进行合并。

我试图合并/改组代码是徒劳的,但它失败了。我一直试图在未经修改的版本1.0和我的修改之间一次拼接版本2.0(订单?),以便我的所有修改提交都重播到版本2:

  1. 签出第一个具有版本1.0代码但没有修改的提交。这导致头部分离。
  2. 创建一个名为版本2.0的新分支
  3. 复制/替换版本2.0中的所有文件而不是版本1.0文件
  4. 执行合并回主版(不幸的是,没有办法指定要将其合并到的提交链中的哪个位置。)
  5. 我尝试使用rebase,它给了我同样的问题。我经常感到非常沮丧和困惑,我只是吹灭我的存储库并再次克隆它。我似乎无法控制Git如何合并。它是否在文件上使用日期?它是基于合并的方向吗?如果是这样,什么方向意味着什么?还有谁是“他们的”和“我们的”?

    ASIDE : Git是如此令人困惑和沮丧,以至于我无法完成任务2周,试图抓住令人难以置信的困难产品。我害怕编程,因为我不得不反对它。根据我的经验,Git比我用过的任何开发工具或语言都难以理解。相比之下,它使C ++看起来像BASIC。 Git觉得我使用的是原始源代码控制API而不是打包产品。我已经尝试过使用各种各样的图形用户界面,它们都是薄薄的橱窗,可以吞下稀粥。

2 个答案:

答案 0 :(得分:2)

这个食谱应该有效:

  1. 查看基于新来源(即共同祖先)基础的版本。
  2. 创建新分支release-2.0
  3. 删除来源不提交
  4. 使用来源
  5. 解压缩ZIP存档
  6. 添加并提交所有文件
  7. 您现在拥有一个包含两个分支的存储库。在这些分支的提示,您有两个版本。

    1. 结帐master
    2. release-2.0
    3. 合并

      这可能会给你带来很多冲突。尝试尽可能多地解决它们,但可能无法解决所有问题。这里的问题是你尝试合并两个以不可预测的方式发生变化的事情,所以git真的无法帮到你。人们在没有告诉git的情况下添加,删除和重命名文件,所以您期望什么?

      如果出现问题,请使用git reset --merge撤消合并(无需再次创建第二个分支)。注意:重置仅在提交合并之前有效。

      如果结果太多,你必须手动合并。这意味着:

      git merge --strategy ours签出后,

      master。这将创建一个新的回购,其内容为master认为 masterrelease-2.0已合并,但实际上并未发生任何事情。

      这对你没什么帮助,但现在Git看到的文件路径与“这是同一个文件”相同。然后,您可以查看历史记录,比较内容并手动合并它们。

      将来,请确保参与项目的每个人都使用Git,以便正确记录所有更改。没有这些信息,世界上没有任何工具可以进行适当的合并。

答案 1 :(得分:1)

在我看来,您的用例接近http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

中描述的修补程序方案(如果您将版本2.0视为修补程序)

检查以下数字

  1. 图3-13。基于主分支点的修补程序分支。
  2. 图3-14。合并后,您的主分支指向与修补程序分支相同的位置。
  3. 图3-16。 Git自动识别分支合并的最佳共同祖先合并基础。