何が起こったか
あるプロジェクトで、追加したい機能があるからmasterブランチからfeatureブランチ切って実装。よしじゃあpull request投げるかーということでpushしたらなんとmasterブランチにpushされてしまった。焦った。
なぜmasterブランチにpushされてしまったのか
featureブランチの切りかたに原因があった
git fetch -p
git checkout -b feature origin/master
git checkout -b
で派生元ブランチにリモートブランチを指定することで、追跡ブランチも指定したリモートブランチに設定されてしまうみたいだった。
この状態でgit push
してしまうとorigin/masterにpushされちゃう。こわい。
どうやって防ぐか
branch.autosetupmergeをfalseに設定
この設定を行っておくことで、派生元ブランチにリモートブランチが指定されていても追跡ブランチに設定されなくなる
git config --global branch.autosetupmerge false
ちなみに--no-track
オプションをつけることでも上記設定と同じ動きをしてくれる。
git checkout -b --no-track feature origin/master
個人的に一番いいと思う方法
ちゃんとgit push origin feature
とpush先を指定する。多分一番シンプルで間違いにも気づきやすいし。