-1

我有一个 Master 分支和一个 Work 分支。我在 Work 分支上工作,团队将更新 Master 分支。

工作分支:1000 <--- 1001 <--- 1002

主分支:1000

现在将 Work 分支合并到 Master 分支,并且它正在工作。

主分支:1000 <--- 1001 <--- 1002 <--- 1003 <--- 1004

Work 分支现在想要将 Master 分支合并到 Work 分支。假设 1003 和 1004 提交对文件 a.cpp 有一些更改

我假设 Work 分支中的 a.cpp 将使用来自 Master 分支的提交 1004 中的最新版本的 a.cpp 自动更新。

但 git 显示没有!它要求解决 a.cpp 的冲突。

两者都添加:a.cpp

但是我比较了 Work 分支中的 a.cpp 和 Master 分支中的 a.cpp。Work 分支中的 a.cpp 是 Master 分支中 a.cpp 的祖先之一,即在提交 1002 中。

请告诉我为什么以及什么是解决它的简单方法?

[更新 1] 抱歉,我认为我过于简化了情况。实际上,在 Work 分支并入 master 分支之前,master 分支中已经有一些提交。

工作分支:1000 <--- 1001 <--- 1002

主分支应该是:1000 <-- 2001 <-- 2002

Work分支合并到Master分支后,

主分支:1000 <--- 合并 (1002, 2002) <--- 2003 <--- 2004

现在将 Master 分支合并回 Work 分支,我假设此合并没有冲突。由于编年史顺序是这样的:a.cpp 上的主代码,a.cp​​p 上的工作代码,a.cp​​p 上的主代码,工作从 Master 获取 a.cpp

[更新 2] 现在我明白会有冲突警告。Git 不遵循文件的编年史顺序。它只遵循提交的编年史顺序。

4

1 回答 1

1

据我了解,您实际上是在做:

git checkout master
git commit -m 1000
git checkout -b work 
git commit -m 1001
git commit -m 1002
git checkout master
git merge work     #  fast-forward, no conflicts possible
git commit -m 1003 a.cpp
git commit -m 1004 a.cpp
git checkout work
git merge master   # again fast-forward, still no conflicts possible

在此之后,两个分支都指向完全相同的提交,并且将包含完全相同的文件。

如果您的情况不同,请在 github 上建立一个小型公共存储库来展示您的情况。

于 2014-12-11T01:13:51.040 回答