よく使う Git コマンド自分用メモです。
これらのコマンドの組み合わせでなんとか開発はできています。新しいコマンドを覚えたら随時追記。
目次
- 基本操作
- ブランチ操作
- tag 操作
- stash 操作
- 変更をやり直す
- rebase -i
- diff
- log
- リモートブランチを全削除するワンライナー
- リモートブランチを全部チェックアウトするワンライナー
基本操作
git init
Git 管理を開始する。カレントディレクトリに .git が作成される。
git add hoge.txt
対象をステージングエリアに追加。
git status
ワークツリーとステージングエリアの状況を表示
git commit -m 'commit message'
ステージングエリアの情報をリポジトリに反映。
git rm hoge.txt
対象をワークツリーとステージングエリアから削除。
git mv hoge.txt piyo.txt
対象の名称変更、場所移動。変更をワークツリーとステージングエリアに反映。
ブランチ操作
git branch feature/hoge
新しいブランチを作成。
git branch
ブランチ一覧を表示。-a
でリモートブランチも表示。
git checkout feature/hoge
ブランチに移動。
git checkout -b feature/hoge
現在のブランチから新しいブランチを作成して移動。
git branch feature/hoge feature/piyo
ブランチ名を変更。
git merge feature/hoge
ブランチの変更を現在のブランチに merge
git rebase feature/hoge
ブランチの変更を現在のブランチに rebase
git branch -d feature/hoge
ブランチを削除。
git branch -D feature/hoge
マージしていないブランチを強制削除。
git push origin master
リモートリポジトリに変更を送信。リモートリポジトリにブランチがない場合はブランチを作ってくれる。
origin は リモートブランチの別名。
git remote -v
リモートブランチの情報を表示。origin が何かはこのコマンドで確認できる。
git fetch origin master
リモートブランチを最新の状態に更新。
git pull origin master
fetch して merge。
git pull origin master --rebase
fetch して rebase。
git checkout -b feature/hoge origin/feature/hoge
リモートブランチをローカルブランチに checkout
git push --delete origin feature/hoge
リモートリポジトリを削除。
git fetch --prune
リモートブランチを削除した環境以外でリモートブランチが残っている場合、リモートブランチを削除。
tag 操作
git tag -a 1.0.0 -m 'tag message'
タグを追加。
git tag
タグ一覧を表示。
git tag show 1.0.0
対象タグのコミットを表示
git tag -d 1.0.0
対象タグを削除
git push origin --tags
リモートリポジトリにタグを送信
stash 操作
git stash save
作業ツリーの状態を一時的に保管する。作業中でコミットできない状態で、merge や rebase したいときによく使う。
git stash list
stash の状態を表示
git stash pop stash@{0}
stash から取り出す。引数には git stash list
の結果を指定する。基本的に1個しか stash しないので引数は省略して使っている。
変更をやり直す
git checkout -- hoge.txt
ワークツリーをステージングエリアの状態に戻す。ワークツリーの変更を破棄する時によく使う。
git rm --cached hoge.txt
ステージングエリアに追加を中止する。git add を中止する時によく使う。
git reset HEAD hoge.txt
ステージングエリアを現在のブランチの最新の状態に戻す。ステージングエリアの変更を破棄する時によく使う。
git reset --hard HEAD
ワークツリーとステージングエリアの変更を戻す。--hard は一歩間違えると未 push の変更が吹っ飛ぶので慎重に。
git reset --soft HEAD^
リポジトリをひとつ前のコミットに戻す。コミットを取り消したい時によく使う。
git reset --soft ORIG_HEAD
リポジトリをマージ前のコミットに戻す。マージを取り消したい時によく使う。
git reset --hard origin/master
ワークツリーとステージングエリアの変更をリモートブランチの状態に強制的に戻す。
git commit --amend
直前のコミットに追加コミットする。git add のし忘れでコミットするファイルが足りなかったり、コミットメッセージを間違えた時によく使う。
git revert 4b1a133e
コミットを取り消す。git log
で hash 値を調べ、指定する。ワーキングコピー、ステージ、リモートブランチがコミット前の状態に戻る。実行するときは、新しい commit から順番に revert すること。
git revert -m 1 4b1a133e
マージコミットを取り消す。マージされたブランチで実行する。
git revert -n 4b1a133e
-n
は --no-commit
オプション。リモートブランチの状態が変更されないので、複数のコミットを取り消す時に使う。新しいものから順番に revert し、最後に commit でリモートブランチに反映する。
git push -f
カレントブランチの状態をリモートブランチに強制的に反映するときに使う。共有ブランチでやるときには注意。
rebase -i
長くなってきたので以下の記事に移動
-
あのコミットをなかった事に。git rebase -i の使い方
以前、Gitの使い方、よく使うGitコマンド という記事を書きましたが、git rebase -i の項目に書き足したい ...
続きを見る
diff
git diff
ワーキングツリーとステージングエリアの差分を表示。git add する前によく使う。
git diff --staged
ステージングエリアとリモートリポジトリの差分を表示。git add
して commit
する前によく使う。
git diff HEAD
ワークツリーと直前のコミットの差分を表示。
git diff develop..feature/hoge
2つのブランチの差分を表示。
git diff develop...feature/hoge
2つのブランチの分岐点からの差分を表示。
git diff HEAD..FETCH_HEAD
git fetch
した変更を表示。
git diff --name-only
差分のあるファイルを表示。
git diff 307987f c756103
コミット間の差分を表示。該当のコミットでの変更点を確認する時によく使う。
log
git log -1
直近のコミットを1つだけ表示する。
git log --since=1.day|1.week|1.month|2013-08-24
指定した日付以降のコミットを表示。
git log --until=1.day|1.week|1.month|2013-08-24
指定した日付以前のコミットを表示。
git log --author=karakaram
指定したユーザのコミットを表示。
git log --grep=fix
コミットメッセージから指定したキーワードを検索。--grep を複数指定すると OR 検索。--all-match で AND 検索。-i で 大文字小文字区別なし。-E で正規表現。
git log -p
コミットの差分を表示する。
git log --name-status
コミットで変更されたファイルを表示。
git log --oneline --no-merges
コミット番号とコミットメッセージを表示。マージコミットを除外。CHANGE LOG を書く時によく使う。
git log hoge.txt
指定したファイルのコミットを表示。
git log master..origin/master --left-right
ブランチ間のコミットの差分を表示。
git log HEAD..FETCH_HEAD
fetch した変更のログを表示。
リモートブランチを全削除するワンライナー
リモートブランチのゴミ掃除に。以下の例は master 以外をすべて削除するワンライナー。
$ git branch -a | grep remotes | grep -v remotes/origin/HEAD | grep -v 'remotes/origin/master' | awk '{print $1}' | sed s/remotes\\/origin\\///g | xargs git push --delete origin
リモートブランチを全部チェックアウトするワンライナー
リモートブランチのゴミ掃除に。以下の例は master 以外をすべて削除するワンライナー。
$ git branch -r | grep -v master | cut -d '/' -f 2-3 | xargs -Irepo git co -b repo origin/repo