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

时间:2014-03-11 03:57:06

标签: git merge git-merge

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

master
development
uat
production

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

当我尝试:

git checkout development
git merge production

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

git diff production..development

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

1 个答案:

答案 0 :(得分:11)

您可能不想merge,而是rebase。也就是说,接受你提交的提交,提交到分支development的提交 - 当你第一次执行clone时不存在的提交,但是在那里现在 - 看看每个人按顺序做出的改变;并再次按顺序将这些更改应用于分支production

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

那说......“最新”并不意味着代码是相同的,无论如何。它只是意味着提交图表明没有什么新内容可以引入。这反过来意味着你(或其他人)已经完成了合并。附加到最终合并的(合并的结果)不是你想要的,但git唯一可以看到的是合并完成了。有关git revert的示例,请参阅Why after merge does GIT say “Already upto date”, but differences between branches still exist?