概要
- 先日Gitを使っていて「あれ、今いるブランチってどのブランチから派生して作ったんだっけ!?」「あ、派生元間違えていた...」となったことがあったので、その際の確認方法と付帯作業について備忘録を残します。
確認事項
- カレントブランチがどこから派生したか
- ローカルに新規ブランチを作成するコマンド
- 派生元を間違えたときはどうすべきか
- ローカルブランチを削除するコマンド
カレントブランチがどこから派生したか
- カレントブランチがどこから派生したかは、以下コマンドで確認ができます。
$ git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}'
ローカルに新規ブランチを作成するコマンド
- 以下コマンドで親にするブランチ名を指定して作成します。
git checkout -b {作成するローカルブランチ名} origin/{親にするリモートブランチ名}
- parentブランチからchildブランチを作成する場合は、以下のようになります。
git checkout -b child origin/parent
- ただし、上記を実行する前に、
git fetch
を行なってリモートにある最新情報をローカルに取り込んだ方が良いでしょう。- fetch+merger=pullというのは覚えておくとわかりやすいです。fetchはあくまで最新情報だけ取得するもの。mergeまで行いません。
git fetch origin
- 補足1:originとは「リモートリポジトリのアクセス先に対してGitがデフォルトでつける名前」です。複数リポジトリを設定している場合は上記のように指定してあげた方が良いかもしれないので、以下コマンドでoriginかどうか確認しましょう。
git remote -v
- 補足2:親にするリモートブランチが存在するかどうか、もしくは改めて確認したい場合は、以下コマンドでリモートブランチを一覧表示できます。
git branch -a
派生元を間違えたときはどうすべきか
- 以下コマンドにより、派生元のブランチを切り替えることができます。
# git rebase --onto {本来親にしたかったブランチ} {間違って親にしてしまったブランチ名} {親を変更する作業ブランチ名}
- 具体的には以下のようなコマンドになります。
git rebase --onto origin/parent feature/fakeparent feature/child
- ただしrebaseコマンドは、コミットの改変なので、すでにpush済みだった場合は、-fオプションで強制的にpushさせるか、以下記事にある他の方法を実行した方が良いです。
ローカルブランチを削除するコマンド
- 不要なローカルブランチがある場合は、以下コマンドで削除できます。以下どちらでも同じです。
git branch --delete {削除したいブランチ名}
git branch -d {削除したいブランチ名}
- ちなみに、現在削除予定のブランチにいる場合、以下のメッセージが表示されます。
Cannot delete branch '削除したいブランチ名' checked out at...
- その場合は、checkoutコマンドで別のブランチに移動しましょう。
git checkout main
git branch --delete {削除したいブランチ名}
- なので、削除を実行する場合は、
git branch
で現在のブランチを確認すると良いです。