LoginSignup
0
0

More than 3 years have passed since last update.

ローカルに追跡ブランチを持たずに新規ブランチを生成するエイリアスを作ってみた

Last updated at Posted at 2021-03-04

動機

こちらのツイートを見て「確かに…」と思ったので、サクッと実行するためのエイリアスを作ってみた。

追記(2021-03-04): デフォルトブランチ、追跡ブランチ等の名称を変更しました。

追跡ブランチ(tracking branch)とはリモートサーバの状態をローカルにコピーして追従するためのブランチです。
基本的には追跡ブランチを最新の状態にし(pull)、そのブランチから新しい機能追加・修正用のブランチを作ります。
しかし、最新の状態にし忘れてブランチを作ってしまったり、ローカルで変更したものをうっかり追跡ブランチ上でコミットしてしまったりするとリモートの状態とずれてしまうため事故が起こりやすいのも欠点です。

エイリアスを作るコマンド

デフォルトブランチとは開発時にメインとなるブランチのことで、 master だったり、 developdevelopment などプロジェクトによってどのブランチがデフォルトなのかは違うため、以下のコマンドを使う前にそれぞれの環境に合わせて読み替えていただきたいです。

origin : リモートサーバーの名前。 git remote -v などで表示される。
master : デフォルトブランチ名。

$ git config --local --add alias.nb '!f(){ [ $# -eq 0 ] && echo "Usage: git nb <branch>" && exit; git fetch --tags --prune origin && git switch -c $1 origin/master; };f'

作成したエイリアスは次のように使う。

$ git nb feature/something

エイリアス名 nb は new branch として適当につけてますが、使いたい人が打ちやすい名前にすれば良いと思います。

解説

コマンドの部分はこんな意味。

  • git config --local : 現在のプロジェクトの設定を表示したり、更新したりする。自分用の全プロジェクト向けの共通設定は --global などで定義可能。
  • --add alias.nb : alias 設定グループに nb を追加する。 alias 設定グループに指定した値は git nb のようにエイリアスとして追加される。

エイリアスに指定した文字列は ! で始まる場合シェルスクリプトとして認識される。
この場合、 f(){ ... } で関数 f を定義して、最後に f で実行しているので、引数を含めて実際には f feature/something として実行される形となる。

f の内容は次のような構成になっている。

  • [ $# -eq 0 ] && echo "Usage: git nb <branch>" && exit; : 引数がなかったらUsageを表示して終了する。
  • git fetch --tags --prune origin : タグと削除されたブランチを含め、リモートの最新状態を取得する
  • git switch -c $1 origin/master : リモートブランチ origin/master を基準として、新しいブランチを作成しブランチへ移動する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0