Gitとbitbucket.comを使用してプロジェクトに取り組んでいる間、次のブランチがあります。
master
development
uat
production
プロジェクトの作業を開始したとき、開発のgitクローンを作成しました(当然、最先端のコードが含まれていると思いました)。数か月後の作業で、本番ブランチ(現在本番ブランチで実行されている)のコードのバージョンが、開発ブランチで開始したコードよりも新しいことが判明しました。
私がしようとすると:
git checkout development
git merge production
「すでに最新です」と表示されます。私が行くとき:
git diff production..development
それは、本番ブランチに開発ブランチにないコードがあるという多くの変更を吐き出します。何ヶ月もの作業を消去せずに、本番コードを開発コードとマージするにはどうすればよいですか?
merge
ではなく、rebase
にしたい場合があります。つまり、行ったコミット、ブランチdevelopment
に追加されたコミットyou、つまり、あなたが行ったときに存在しなかったコミットを取得します。最初にclone
を実行しましたが、現在は存在し、それぞれが順番にどのような変更を加えたかを確認します。そして、これらの変更をブランチproduction
の上に順番に適用します。
(それらのいくつかはおそらくうまくいきません:production
に存在しないdevelopment
への変更は、あなたが行った変更のいくつか、おそらく多くは、適合するように変更する必要があることを意味します。さらに悪いことに、変更の1つを変更すると、ほぼ確実に多くの変更に影響するため、このリベースは困難になる可能性があります。)
とはいえ...「最新」とは、コードが同じであることを意味するものではありません。これは、コミットグラフが、新しいものが何もないことを示していることを意味します。つまり、あなた(または他の誰か)がすでにマージ。最終的なマージ(マージの結果)に添付されたtreeはあなたが望むものではありませんが、gitが見ることができるのはマージが完了しました。たとえば、git revert
を含む例については、 マージ後、GITが「すでに最新」と表示するのにブランチ間の違いがまだ存在するのはなぜですか? を参照してください。