Gitの使い方、よく使うGitコマンド

2013年8月25日

git-logo

よく使う Git コマンド自分用メモです。

これらのコマンドの組み合わせでなんとか開発はできています。新しいコマンドを覚えたら随時追記。

目次

  1. 基本操作
  2. ブランチ操作
  3. tag 操作
  4. stash 操作
  5. 変更をやり直す
  6. rebase -i
  7. diff
  8. log
  9. リモートブランチを全削除するワンライナー
  10. リモートブランチを全部チェックアウトするワンライナー

基本操作

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 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-usage
あのコミットをなかった事に。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

-技術ブログ
-