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

War*_*all 11 git merge git-merge

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

master
development
uat
production
Run Code Online (Sandbox Code Playgroud)

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

当我试图:

git checkout development
git merge production
Run Code Online (Sandbox Code Playgroud)

它说"已经是最新的".我去的时候:

git diff production..development
Run Code Online (Sandbox Code Playgroud)

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

tor*_*rek 11

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

(有些人可能不会去干净:更改production不存在于development将意味着一些,也许很多的变化,你做需要进行修改,以适应糟糕的是,改变你的变化之一,几乎肯定会影响.更多你的改变,所以这个改变可能很困难.)

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