18

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

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

ときどき、後でgit svn rebaseもう一度リモートの変更を取得すると、a_branch がメインラインにマージされ、ツリーが次のようになるという事実が失われます。

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

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

4

2 に答える 2

22

git-svn のマニュアル ページでは、マージを使用しないことを推奨しています。これは一つの副作用です。ブランチをリベースしているため (git svn rebase は "git pull --rebase" に少し似ています)、履歴が効果的に書き換えられます。マージなど、Subversion で既に上流にあるローカル コミットを破棄し、svn リポジトリに実際に存在するコミットのみを保持する場合があります。ローカル ブランチの単純なマージ コミットは SVN に相当するものがないため、「実際の」変更のみをコミットするため、これらは新しいリベースされたマスター ブランチに表示される唯一の変更です。

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

于 2009-01-08T22:19:58.050 に答える
0

あなたはsvnを通過しているからです。そうすると、多くの情報が失われます(たとえば、作成者も失われます)。

于 2009-01-08T20:39:03.277 に答える