【问题标题】:Git merge 2 versions no common ancestorGit合并2个版本没有共同祖先
【发布时间】:2013-03-05 00:06:32
【问题描述】:

我的源代码位于 mercurial 存储库中,而主分支已从 mercurial 移至 git 存储库。当前的 git master 分支头和我的 mercurial 版本有冲突。 git master 是作为一个新的 repo 创建的,而不是从原始的 mercurial repo 派生的。如何将我的修改与主分支的修改合并?

如果我从 master 创建一个新分支,用我的 mercurial 源覆盖源并将其与 master 合并,git 不会检测到冲突(我想是因为我们没有共同的祖先版本)

【问题讨论】:

标签: git mercurial merge


【解决方案1】:

我不认为它会。如果您从 master 创建一个新分支,那么您 确实 实际上有一个共同的祖先,而那个共同的祖先实际上就是 master 本身。这意味着合并结果实际上是您的新分支,因为它是来自 master 的快进。

如果您要创建一个没有历史记录(或与 master 没有关系)的新分支,那么您会得到预期的合并冲突。您可以创建一个新的孤立分支:

git checkout --orphan new_branch

然后从 mercurial 复制您的源代码,您将能够与 master 合并。两个分支之间不完全相同的任何文件都将被标记为冲突。

【讨论】:

  • git checkout 不会创建新分支吗?或者你的意思是我应该创建一个分支,然后使用 --orphan 来检查它
  • git checkout 将在给定 -b--orphan 标志时创建一个新分支。
  • hmm 在我的情况下效果不佳:“git checkout --orphan tm”切换到新分支“tm”“git log”致命:错误的默认修订版“HEAD”“git 分支-a master" remotes/origin/HEAD -> origin/master remotes/origin/master
  • 这就是你应该看到的。您刚刚创建了一个没有历史记录的分支(即没有HEAD)——也就是一个“孤儿分支”——如果您希望没有任何关系,这正是您想要的。添加并提交文件后,git log 应该只向您显示一个提交,即您刚刚提交的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多