どこまでもズボラなgit aliasたちを極める
作成日: 2024-06-24
gitのコマンドは長く、覚えづらいです。GUIもめんどくさいです。エイリアスで短くしましょう。
紹介するエイリアスを使うと、こんな感じの作業になります。
$ fom good-pr # ブランチ新規作成、作業開始!
$ echo better fix > fixed
$ ac fix # とりあえずコミット
$ echo perfect fix > fixed
$ ac ture fix # もう一回、新規コミット
$ gi
(リベース作業でコミットをまとめる)
$ z fix a malform function # まともなコメントにrename
$ gp # プッシュ
$ pr
(ブラウザが開く)
$ c コミットする
$ git commit -m "good message"
$ c good message
git commit -mと等価の1文字alias。とても便利
c-func(){git commit -m "$*"}
alias c='noglob c-func'
zshのnoglob機能と組み合わせると良いです。クオートせずにメッセージを書けます
$ a. 全部ステージする
$ git add -A
$ a.
git add -Aでコミットが作れる状態にしてます。gitのworkdirはきれいな方が楽。適宜.gitignoreに突っ込みましょう。
$ ac 全部コミットする
$ a. && git status -sb && c good message
$ ac good message
作業途中でも全部コミットします
$ am 今のステージにコミットを変える
$ a. && git status -sb && git commit --amend --no-edit
$ am
HEADコミットをやり直します
$ z コミットメッセージを直す
$ git commit --amend -m "fixed message"
$ z fixed message
HEADコミットメッセージを修正します
$ gp 安全なフォースプッシュ
$ git push --force-with-lease
$ gp
git push -f
は有害です$ f フェッチ
$ git fetch
$ f
pullではなく、fetchをよく使います
$ fm メインブランチをフェッチ
$ git-default-branch(){ git remote show origin | head -n 5 | sed -n '/HEAD branch/s/.*: //p'i }
$ git fetch $(git-default-branch)
$ fm
mainブランチだけfetchしたい。
git-default-branch
でデフォルトのブランチを取得します。$ o チェックアウト
$ git switch feature
$ o feature
checkout
の o
aliasを昔から使っていたので、 switch
でもそのまま$ ob 新規ブランチ作成してチェックアウト
$ git switch -c feature
$ ob feature
これも
checkout -b
の名残です$ om メインブランチから新規ブランチチェックアウト
$ git switch $(git-default-branch) -c feature
$ om feature
mainブランチからブランチを切る。git-default-branchの定義はページの最後にあります。
$ fom メインブランチ更新して新規チェックアウト
$ fm && om feature
$ fom feature
mainブランチをfetchして、mainブランチから始めます。(どこにcheckoutしていてもできます!)
$ o- 前のブランチに戻る
$ git switch -
$ o-
前に居たブランチに戻ります
$ gri リベース開始
$ git rebase -i
$ gri
雑にコミットして、後からリベースする流派なのでめっちゃ使います
$ gi メインブランチからリベース開始
$ git rebase --autosquash -i --keep-base ${1-$(git-default-branch)}}
$ gi
ブランチの根本からリベースします
$ grc リベース続行
$ git rebase --continue
$ grc
リベース中によく使います
$ gra リベース中断
$ git rebase --abort
$ gra
リベースをミスってよく使います
$ grs コミットを置き換える
$ git reset --soft
$ grc
--soft
だけ安全性が高いので、エイリアスしています$ pr プルリクエストを開く
$ gh pr create -w
$ pr
GitHubのPRを開く。便利。
コピペ用
紹介していないエイリアスも含まれています。
alias g='git'
# git add aliases
alias a='git add'
alias a.='git add -A'
alias ac='git add -A && git status -sb && c'
alias am='git add -A && git status -sb && git commit --amend --no-edit'
alias ga='git add'
alias gap='git add -p'
alias gan='git add -NA'
# git commit aliases
c-func(){git commit -m "$*"}
alias c='noglob c-func'
alias ca='git commit --amend --no-edit'
cam-func(){git commit --amend -m "$*"}
alias cam='noglob cam-func'
cf(){git commit --fixup ${1-HEAD}}
z-func(){git commit --amend -m "$*"}
alias z='noglob z-func'
alias gc='git commit'
alias gca='git commit -v -a'
alias gcm='git commit -m'
alias gcp='git commit -p -v'
# git checkout aliases
alias o='git checkout'
alias ob='git checkout -b'
om(){git checkout $(git-default-branch) -b $@}
fom(){fm && om $@}
alias o-='git checkout -'
# git fetch aliases
alias f='git fetch'
fb(){git fetch origin $1:$1}
fm(){fb $(git-default-branch)}
# git misc aliases
alias gb='git branch'
alias gp='git push --force-with-lease'
alias grs='git reset --soft'
alias pr="gh pr create -w"
# git rebase aliases
alias gr='git rebase'
gi(){git rebase --autosquash -i --keep-base ${1-$(git-default-branch)}}
alias grc='git rebase --continue'
alias gra='git rebase --abort'
alias gri='git rebase -i'
grm(){git rebase $(git-default-branch)}
# git tools
git-default-branch(){ git remote show origin | head -n 5 | sed -n '/HEAD branch/s/.*: //p'i }
git-current-branch(){ git rev-parse --abbrev-ref HEAD }
git-current-remote(){ echo ${$(git rev-parse --abbrev-ref HEAD@{upstream})%%/*} }
git-rename-remote(){ local REMOTE=$(git-current-remote); git push $REMOTE :$(git-current-branch) && git branch -m $1 && git push -u $REMOTE $1 }
git-rename(){ git branch -m $1 }
git-delete(){ git branch -D $1 }
git-change(){ local BRANCH=$(git-current-branch); git switch -d $1 && git switch -C $BRANCH }