Webtech Walker

git-svnでリモートブランチをmergeするときは–no-ffをつけるべし

git-svnでリモートブランチをきって作業しててtrunkにmergeしようと思ったら、mergeした先のローカルブランチの向き先がリモートブランチになる現象ではまった。またしてもtypester++であります。インクリメントされすぎてそろそろ2147483647超えるんじゃないと心配です。

# 今masterブランチにいる
$ git branch
* master

# リモートブランチはtrunkを見てる
$ git svn info
URL: http://path/to/trunk
...

# リモートブランチtopicを作成してローカルブランチtopic_localにコピー
$ git svn branch topic
$ git checkout -b topic_local topic

# ローカルブランチはtopic_local
$ git branch
master
* topic_local

# リモートブランチはtopicを見てる
$ git svn info
URL: http://path/to/branches/topic
...

# 修正してmasterにmerge
$ edit ..
$ git commit
$ git checkout master
$ git merge topic_local

# ローカルブランチはmaster
$ git branch
* master
topic_local

# リモートブランチがなぜかtopicを向いてる!!!!!
$ git svn info
URL: http://path/to/branches/topic
...

いう感じです。これを回避するにはmergeするときに

$ git merge --no-ff topic_local

とすればいいらしい。mergeするときにfast-forwardしてしまうとgit-svnはうまくいかないらしいです。

ちなみにtopic branchに向いてしまったmasterをtrunkに戻すにはmergeする以前までresetすればOK。

このエントリーをはてなブックマークに追加