如何使分支相同

时间:2014-06-17 18:40:43

标签: git version-control merge

我在我的仓库origin和分支origRepo/master中有一个分支主人(其中origRepo是我origin的上游,我在那里总是从{{获取更改1}}。 到目前为止,我一直在这样做只获取origRepo中提交的选择性文件。 基本上是部分合并。 首先,我确保我的主人干净origRepo然后我

取自git clean -df

origRepo

然后我合并而没有像这样提交:

git fetch origRepo/master

然后我以交互方式取消了不需要的文件(未合并表示这些文件)

git checkout master
git merge --no-ff --no-commit origRepo/master

然后我用

提交合并(选择性文件)
git add -i  #interactively stage and unstage files

然后我重置为提交并清理主

git commit -m "Merged this and that"

到目前为止,仅从origRepo / master

中提取了一些提交

我的问题是这样的:我认为上述工作流程中的未合并(未分级)文件(我在git reset --hard git clean -df 的历史记录的几次提交中所做的)将始终显示再做一次部分合并时(因为那些未合并的文件与我的主文件不同)。但不幸的是他们没有再出现......?

如何在上述工作流程中合并{strong>尚未合并的origRepo/master中的所有未合并文件的问题。我是否需要再次合并一系列提交? 我需要做什么,上面的工作流程是愚蠢的?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您的工作流程确实非常错误。 git中的合并提交说“我包含所有我父母的变化”。 (但正如你已经发现的那样,当然可以违背这一承诺)。

你现在处于一个相当可怕的位置,因为git他无法理解正在发生的事情。我不认为git本身可以帮助你。我假设您还进行了仅在master中的本地更改。

要解决这个问题,你需要:

  • 结帐master并将您的工作目录复制到某处( A
  • 结帐origRepo/master并将您的工作目录复制到某处( B
  • (也许)在分歧之前(在所有那些单文件副本之前)签出第一个版本并在某处复制您的工作目录( C
  • 再次结帐master并执行git merge --no-ff --no-commit origRepo/master
  • 手动合并(在其他地方):
    • 执行双向差异合并 A B
    • 或以 C 为基础进行三向合并。您可以使用git来实现:
      • 以空目录开始
      • 复制 C
      • git initgit add .git commit -m "Base"
      • 清空工作目录并复制到 A
      • git add -ugit add .git commit -m "Local"
      • git checkout HEAD^ -b repo
      • 清空工作目录并复制 B
      • git add -ugit add .git commit -m "Repo"
      • git checkout mastergit merge repo
      • 解决合并冲突
  • 使用外部合并和提交的结果覆盖工作目录的内容。