问题 git merge已经是最新的,当它不是时


在使用git和bitbucket.com处理项目时,有以下分支:

master
development
uat
production

当我开始项目工作时,我采用了一个开发的git克隆(自然地认为它包含了最先进的代码)。几个月后的工作,现在结果是生产分支中的代码(当前正在生产中运行)的版本比我在开发分支中开始的代码更新。

当我试图:

git checkout development
git merge production

它说“已经是最新的”。我去的时候:

git diff production..development

它吐出了很多变化,说生产分支的代码不在开发分支中。如何在不擦除我几个月工作的情况下使生产代码与开发代码合并?


6633
2018-03-11 03:57


起源

也可以看看 虽然存在差异,Git合并报告“已经是最新的”。
如果你这也可能发生 fetch 但是忘了 pull 您尝试合并到当前分支的分支。 - Tony


答案:


你可能不想 merge,而是 rebase。也就是说,接受你提交的提交,即提交  添加到分支机构 development - 当你第一次做你的时候不存在的那些 clone,但现在有 - 并看看每个人按顺序做出了哪些改变;并再次按顺序将这些更改应用于分支的顶部 production

(其中一些可能不会干净利落:改变 production 不存在的 development 意味着你所做的一些或许多修改需要修改以适应。更糟糕的是,改变你的一个改变几乎肯定会影响你的更改,所以这个改变可能很困难。)

那说......“最新”并不意味着代码是相同的,无论如何。它只是意味着 提交图 表明没有什么新内容可以引入。反过来,这意味着你(或其他人)已经完成了合并。该  附加到最终合并(合并的结果)不是你想要的,但git唯一可以看到的是合并完成。看到 为什么合并之后GIT会说“已经是最新的”,但分支之间的差异仍然存在? 举个例子 git revert, 例如。


11
2018-03-11 06:42