稲枝の押入れ

いなえが適当なことを書いては、しまっておく場所

TortoiseHgからMercurialでブランチを作成しようとするとうまくいかない

日本語ドキュメントが少ないのでメモ

TortoiseHgでブランチを作成してpushしようとすると、うまくいかないことがある

普通は、ブランチを作成してpushしようとすると、

---------------------------
新規ブランチの作成
---------------------------
これからプッシュするチェンジセットは新しいブランチを作成します。連携先に新しいブランチを作成しますか?
---------------------------
Yes   No   
---------------------------

みたいなウィンドウが出てきて、Yesを押せば(下のコンソール部に警告は出るが)pushは無事行われてリモートリポジトリにブランチは作成される

ただし、既に同名ブランチが作成されている場合は新しくブランチを作ろうとすると

---------------------------
ブランチ変更確認
---------------------------
名前付きブランチ「{ブランチ名}」は既に存在します (最終リビジョンは 6)

---------------------------
ブランチを切り直し   現行のブランチへコミット   キャンセル   
---------------------------

みたいなウィンドウが出てくる。コレ自体はブランチを切り直しを選択すればローカルにブランチの作成は出来るのだが、デフォルトの状態だとpush出来ない。

pushしようとすると、コンソールには

中止: 新しいヘッド {ハッシュ値} が連携先のブランチ '{作成しようとしているブランチ名}' に作成されます!
ヒント: マージするか、新規ヘッドの反映に関して 'hg help push' を参照

的な警告が出ていて、上にもヒント: マージするか、新規ヘッドの反映に関して 'hg help push' を参照みたいポップアップ?が出てきたりする

恐らくこれはheadを増やすことは混乱の原因という風に考えているmercurialの思想に基づいていると思っているのだが、とにかくこのままだと何回やってもpush出来ない

どうすればいいかというと--forceオプションを追加してpushすればいい。しかしここまでツールでやっているのに一部だけコマンドラインを使うというのも「なら最初からコマンドラインでやれや」となるし、非プログラマが触りづらい

一応このオプションを付けてpushする方法もTortoiseHg上には用意されている。以下のようにする

f:id:makiofinae:20190331232643p:plain
TortoiseHg_toolbar

  • 上のツールボックス?から同期アイコン(上記画像の赤丸)を選択すると下半分が同期画面になる
  • 同期画面のオプションボタンを押す
  • pushやpullを強制(安全確認を無効化 --force)にチェックをいれSaveする
  • この状態でpushする

これで過去に作成したブランチと同名のブランチを新たに作成する内容のcommitであっても何も警告が出ないでpush出来る

ただし、ここにチェックを入れたままにしていると、push時の警告が出なくなるので必要のない時はチェックを外しておくことを推奨する

元のコミット画面に戻る時は上記画像の赤丸を選択するといい