冒頭の画像が素晴らしくわかりやすかったので紹介してみます。
以下はMaxence Poutord( dev.to / Twitter / GitHub / Linkedin )によるGit: Cheat Sheet (advanced)の日本語訳です。
Git: Cheat Sheet (advanced)
Gitでわからないことがあったときのために、この小さなチートシートを作りました。
git commit
やgit pull/push
といった本当に基本的なコマンドはあえてスルーしているのでご注意ください。
このチートシートは"advancedな"使い方を目的としています。
🧭 Navigation - Go to the previous branch
ひとつ前にいたブランチに戻る。
git checkout -
🔍 Get the history
コミット履歴を取得。
# 1コミットを1行で表示
git log --oneline
# 全てのコミットメッセージを取得し、'homepage'を含むものだけ抽出
git log --all --grep='homepage'
# コミッターで検索
git log --author="Maxence"
🙈Ooops #1: I reseted an unwanted commit. How to rollback?
不要なコミットをしてしまった。ロールバックはどうすれば?
# やったことを一覧表示
git reflog
# 目的のコミットまでリセットする。 下記例ではHEAD@{4}
git reset HEAD@{4}
# もしくは↓でもよい
git reset --hard <commit-sha1>
もっと詳しく知りたい場合は、What's happens when you git commit
を参照してください。
🤦♀️Ooops #2: I mixed-up with my local repo. How to clean it?
ローカルリポジトリと混ざってしまった。戻すにはどうすれば?
git fetch origin
git checkout master
git reset --hard origin/master
# masterがorigin/masterと同じになった
🕵🏻♂️Difference between my branch and master
masterとの差分を見たい。
git diff master..my-branch
✔ Custom commits
# 最終コミットメッセージを変更したい
git commit --amend -m "A better message"
# 最終コミットに変更を追加したい、メッセージはそのまま
git add . && git commit --amend --no-edit
# CIビルド等のために空コミットをしたい
git commit --allow-empty -m "chore: re-trigger build"
♻️ Squash commits
最新の3コミットをまとめたいとしましょう。
・ git rebase -i HEAD~3
・ 最初だけ"pick"のままとし、残りを"squash"(あるいは省略形の"s")に置き換える。
・ コミットメッセージを整理して":wq"などで保存する。
How to squash commits https://t.co/pTqLV7YVX7 @YouTubeさんから
— 2019年12月18日
🎯Fixup
コミットfed14a4c
に何か追加したいとしましょう。
git add .
git commit --fixup HEAD~1
git rebase -i HEAD~3 --autosquash
# エディタを保存して終了する
🕹Execute command on each commit when rebasing
commit
毎にコマンド実行したい。
大規模な機能の場合、ひとつのブランチに多くのコミットが連なることがあります。
そしてテストが失敗し、ギルティなコミットを特定しなければならなくなります。
その場合、rebase --exec
でコミット毎にコマンドを実行することができます。
# 最後の3コミット全てnpmコマンドが走る
git rebase HEAD~3 --exec "npm run test"
🦋Stash
git stash
とgit stash pop
だけが全てではありません。
# 追跡ファイルを全て保存する
git stash save "your message"
# stashされているリストを表示
git stash list
# 適用して削除
git stash apply stash@{1}
git stash drop stash@{1}
# ↑を1コマンドで実行
git stash pop stash@{1}
🗑 Clean
# リモートに存在しなくなったブランチを削除
git fetch -p
# "greenkeeper"が含まれるブランチを全削除
git fetch -p && git branch --remote | fgrep greenkeeper | sed 's/^.\{9\}//' | xargs git push origin --delete
🐙 GitHub = Git + Hub
私はgit
のラッパーとしてHubを使っています。
alias git='hub'
するとgitコマンドでhubが動作します。
# ブラウザでリポジトリを開く
git browse
他のコマンドはこちらにあります。
🦄 Bonus: my favourite git aliases
おまけ:個人的gitエイリアス。
alias g='git'
alias glog='git log --oneline --decorate --graph'
alias gst='git status'
alias gp='git push'
alias ga='git add'
alias gc='git commit -v'
# 🤘
alias yolo='git push --force'
# useful for daily stand-up
git-standup() {
AUTHOR=${AUTHOR:="`git config user.name`"}
since=yesterday
if [[ $(date +%u) == 1 ]] ; then
since="2 days ago"
あなたのお気に入りコマンドは何ですか?
お読みいただきありがとうございます。
お役に立てば幸いです。
気に入ったら❤か🦄をください。
また質問やコメントもどうぞ。
元記事はmaxpou.frに投稿されています。
コメント欄
「とても参考になった。」「素晴らしい。」
「git-standup
すき。」
「タイポするからalias gti='git'
って入れてる。」
「同じようなmergeやrebaseで同じようなconflictが出るときに自動解決してくれるgit rerereは重宝してる。」
「git save
は非推奨になったからgit push -m
使った方がいいよ。」「git save
なんて使ってたっけ?」「ごめん略しすぎた。git stash save
のかわりにgit stash push -m
を使ってってこと。」「おk完全に理解した。」
「このgit lgが好み。」
「git branch -f master dev_branch
ローカルのmasterを上書き。git push remote +dev_branch:master
リモートのmasterを上書き。」
「こんなエイリアスを使ってる。gwip
はあらゆる差分を全てcommitする、gunwip
はそれを元に戻す。」
gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'
自分のaliasを公開している人が何人かいました。
感想
まじかstash save
がdeprecateになってたのかよ。
と思ったが、よく考えたら普段からsave
は略してたからデフォルトでpush
になっていたようだ。
さてこの記事ですが、チートシートというよりは便利なコマンド集ってかんじですね。
覚えておくといざというときに役立ちそうです。
あとコメント欄のエイリアスは参考になります。
私はgit lgaくらいしか使ってないですが。
あとコメントに載ってたこのエイリアス集を見て、頭に!
を入れるとシェルコマンドを呼べることを知った。
インストールが必要なので全環境で使えるとは限りませんが、Hubもよさそうですね。
gitコマンド上書きまでしてしまうのはさすがにどうかと思いますが、GitHubをメインで使っているなら導入しておくと便利になることでしょう。