gitのcommit&pushを簡単にした【zsh】

どうもこんにちは、Megです。

Meg

機械学習を専門に勉強している、理系男子大学生です。

大学の学部では生命工学を学び、男子の中で成績1位を取るほどの勉強好き。

主に生機械学習と生活改善を中心に、日々の学びで得た知識やヒントをブログで共有していきます!

Megをフォローする

今回はgitにおいてなるべくadd&commit&push&mergeを簡単にする方法について解説したいと思います。

add&commit&push&mergeを簡単にしようと思ったきっかけ

自分はAtCoderのコードをGitHubで管理しているのですが、ローカルとリモートリポジトリを紐つけるのがめんどくさいと思ったのがきっかけです。
通常のGitHub管理の流れなら、

  1. 編集したファイルを確認し、ステージングにaddする。
  2. ステージングにaddされたのをgit statusで確認した後、git commit -mでコミットメッセージをつけてコミットする。
  3. そしてコミットしたものをgit push orgin "ブランチ名"でpushする。
  4. pushされたブランチを確認し、Web上でmergeする。
    このように編集内容をリモートリポジトリと同期するだけで4工程あります。
    大勢で一つのプロジェクトを進めている場合はこの工程は素晴らしいストラテジーなのですが、今回の自分のようにGitHubをコードの倉庫として運用したい人にはかなり面倒に感じられます。

ですので、上記4工程をシェルスクリプトを用いてなるべく完結にしていきます!

こちらのサイトをかなり参考にさせていただきました。

【Git 作業効率化 Tips】〜git addしてcommitしてpushするのが面倒な全ての人に捧ぐ〜 - Qiita
Githubが普及し、アジャイル開発やInfrastructure as Codeが当たり前になったいま アプリ開発者・インフラ開発者にとってgitは最も多く使われるコマンドのひとつではないでしょうか? 私は仕事ではアプリ開発か...

.zshrcにコードを追加

下記に記述してあるコードをホームディレクトリ配下にある、~/.zshrcにそのままコピペしましょう!
注意!こちらはコマンドプロンプトやターミナルがzshの人専用です。bash等を用いている人は適宜コードの修正が必要です。(←bashの人は自分が参考にさせて頂いたこちらのサイトを参考にしてください。)

【Git 作業効率化 Tips】〜git addしてcommitしてpushするのが面倒な全ての人に捧ぐ〜 - Qiita
Githubが普及し、アジャイル開発やInfrastructure as Codeが当たり前になったいま アプリ開発者・インフラ開発者にとってgitは最も多く使われるコマンドのひとつではないでしょうか? 私は仕事ではアプリ開発か...

.zshrcに記入。

# git add, commit, pushまで一度に行う
gish() {
    # 全てステージにのせる
    git add -A;
    # コミット対象のファイルを確認
    git status;
    echo "Commit with this content. OK? (y/N)"
    if read -q; then
      echo ;
      echo "Input Commit Message: ";
      read msg;
      git commit -m "$msg";
      CULLENT_BRANCH=`git rev-parse --abbrev-ref HEAD`;
      git push origin ${CULLENT_BRANCH};

    else
      echo ;
      echo "Quit.";
    fi
}

このコードはgit add,git statusを自動化しており、コミットするかどうかをy/N(yes/no)で質問されます。
Yesなら、コミットメッセージを入力しEnterを押すだけで作業中のブランチがpushされます。
Noなら、コミットは取り消されます。(addしたものはもとには戻りません。)

これなら、作業刷る際にあえてブランチは切らず、mainブランチで作業することで(個人でGitHubをコードの倉庫にしたいだけだから耐え)、gishからコミット名を打ち込むだけでリモートリポジトリと同期ができます。

簡略コード

「yes/noの質問もコミットメッセージも煩わしい!!」という人は以下のコードを~/.zshrcにコピペしてください。

gish() {
    # 全てステージにのせる
    git add -A;
    # コミット対象のファイルを確認
    git status;
    # コミットメッセージ"auto-commit"でコミット
    git commit -m "auto-commit";
    CULLENT_BRANCH=`git rev-parse --abbrev-ref HEAD`;
    git push origin ${CULLENT_BRANCH};
}

注意!これはgishを叩いただけでpushされてしまうので、自分のようにGitHubをコードの倉庫として使うリポジトリでのみ使用しましょう。
上記のコードなら皆で共同開発しているようなリポジトリでも使えるので、汎用性は高いです。

参考にしたサイト

17 Shell Builtin Commands

bash, zshでyes/no判定をするワンライナー – Qiita

bash,dash,zshのreadコマンドと行ごとの読み込み処理(while read)

【Git 作業効率化 Tips】〜git addしてcommitしてpushするのが面倒な全ての人に捧ぐ〜 – Qiita

タイトルとURLをコピーしました