git svn dcommitがローカルブランチのマージコミットの履歴を失うのはなぜですか?

StackOverflow https://stackoverflow.com/questions/425766

  •  06-07-2019
  •  | 
  •  

質問

git svn clone で作成されたローカルgitリポジトリがあります。ローカルブランチを作成し、いくつかの変更を加え、マスターに切り替え、 git svn rebase を実行します。すべてがうまくいけば、ブランチをマスターにマージします。ツリーは次のようになります。

代替テキストhttp://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

時々、後で git svn rebase してリモートの変更を取得すると、a_branchがメインラインにマージされたという事実が失われ、ツリーは次のようになります。

代替テキストhttp://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

それはなぜですか?止められますか?ブランチがマージされたことを確認する簡単な方法はありますか、または完了したらブランチを削除してマージされたものとされていないものを忘れないでください?

役に立ちましたか?

解決

git-svn manページでは、mergeを使用しないことを推奨しています。これは1つの副作用です。ブランチをリベースしているので(git svn rebaseは「git pull --rebase」に少し似ています)、事実上履歴を書き換えます。マージなど、すでにサブバージョンの上流にあるローカルコミットは破棄され、svnリポジトリに実際に存在するコミットのみが保持されます。ローカルブランチの些細なマージコミットにはSVNに相当するものがないため、「実際の」コミットのみをコミットします。変更されたため、これらはリベースされた新しいmasterブランチで見られる唯一の変更です。

理想的には、ローカルブランチは早送りのみをマージする必要があります。つまり、マージコミットは生成されません。そうでない場合は、ローカルブランチをマージするのではなく、マスターにリベースすることを検討する必要があります。これにより、マージコミットの作成が完全に回避されます。

他のヒント

svnを通過するため。そうすると、多くの情報が失われます(たとえば、作成者も失われます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top