Help us understand the problem. What is going on with this article?

Gitアドバンスドチートシート

冒頭の画像が素晴らしくわかりやすかったので紹介してみます。
以下はMaxence Poutord( dev.to / Twitter / GitHub / Linkedin )によるGit: Cheat Sheet (advanced)の日本語訳です。

Git: Cheat Sheet (advanced)

Gitでわからないことがあったときのために、この小さなチートシートを作りました。
git commitgit pull/pushといった本当に基本的なコマンドはあえてスルーしているのでご注意ください。
このチートシートは"advancedな"使い方を目的としています。

01.png

🧭 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"などで保存する。

🎯Fixup

コミットfed14a4cに何か追加したいとしましょう。

02.png

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"

03.png

🦋Stash

git stashgit 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をメインで使っているなら導入しておくと便利になることでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした