Bash
Git

gitブランチ切り替え用の便利なpush/popコマンド (pushg/popg)

More than 1 year has passed since last update.

別ブランチをちょっといじってから元のブランチに戻りたい時はありませんか?

いつも git checkout で元のブランチ名を入力したりコピーしたりしていましたが、
もっと簡単に元のブランチに戻れるためのbash関数を作ってみました。
よかったら試してください。

コマンドの説明

pushg

  • 現在checkoutされているブランチかrevisionを記憶させる
    • .gitstack というファイルの最後に追加される

popg

  • 前回のpushgのブランチを再度checkoutさせる
    • .gitstack から消される

※ .gitstack は各gitルートフォルダにて作成されます。

使い方の例

別ブランチに一時移動

$ git checkout my-feature
$ pushg  # 今いるブランチを記憶させる
Added my-feature to .gitstack

$ git checkout other-branch
$ popg   # さっきまでいたmy-featureに戻る
git checkout my-feature

前のrevisionに一時移動

$ git checkout my-feature
$ pushg  # 今いるブランチを記憶させる
Added my-feature to .gitstack

$ git checkout HEAD~1  # 一つ前に移動
$ pushg  # 今いるブランチを記憶させる
Added a1a1a1a to .gitstack

$ git checkout HEAD~1  # 更に前に移動
$ popg
git checkout a1a1a1a 
$ popg
git checkout my-feature
  • checkoutが失敗しても(変更ファイルがある等) .gitstack から消されますが、
    popg 時に git checkout コマンドが出力されるので状況を確認してからそのコマンドを実行してください。

セットアップ方法

.bashrc などの起動時に実行されるファイルにこちらの関数を追加します。
(次回接続時に関数が)

function pushg() {
    local GITSTACK="`git rev-parse --show-toplevel`/.gitstack"
    local BRANCH=`git symbolic-ref --short -q HEAD`
    if [ -z "$BRANCH" ]; then
        BRANCH=`git log -1 --oneline  | cut -f1 -d' '`
    fi
    echo $BRANCH >> $GITSTACK
    echo "Added $BRANCH to .gitstack"
}

function popg() {
    local GITSTACK="`git rev-parse --show-toplevel`/.gitstack"
    touch $GITSTACK
    local BRANCH=`tail -n1 $GITSTACK`
    if [ -n "$BRANCH" ]; then
        sed -i '$d' $GITSTACK
        echo "git checkout $BRANCH"
        git checkout $BRANCH
    else
        echo 'Nothing in .gitstack'
    fi
}

※ すぐ適応したい場合は、直接bashにコピペすることもできます。

その他

git status などした時に .gitstack ファイルを無視させる方法

mkdir -p ~/.config/git
echo .gitstack >> ~/.config/git/ignore

stackの中身を確認する(gitのルートフォルダにて)

cat .gitstack

stackを空にする(gitのルートフォルダにて)

rm .gitstack

ご意見

(あるいはもっと便利な方法など)
ありましたらコメントください!