在使用git和bitbucket.com处理项目时,有以下分支:
master
development
uat
production
当我开始项目工作时,我采用了开发的git克隆(自然地认为它包含最先进的代码)。几个月后的工作,现在结果是生产分支中的代码(当前正在生产中运行)的版本比我在开发分支中开始的代码更晚。
当我尝试:
git checkout development
git merge production
它说“已经是最新的”。我去的时候:
git diff production..development
它吐出了很多变化,说生产分支的代码不在开发分支中。如何在不擦除我几个月工作的情况下使生产代码与开发代码合并?
答案 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?。