karakaram-blog

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

 ツイート 0  シェア 1  Google+1 0  Hatena 7

git-logo

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

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

目次

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

基本操作

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
マージしていないブランチを強制削除。

tag 操作

git tag -a 1.0.0 -m ‘tag message’
タグを追加。
git tag
タグ一覧を表示。
git tag show 1.0.0
対象タグのコミットを表示
git tag -d 1.0.0
対象タグを削除

stash 操作

git stash save
作業ツリーの状態を一時的に保管する。作業中でコミットできない状態で、merge や rebase したいときによく使う。stash するのは1個までという自分ルールあり。
git stash list
stash の状態を表示
git stash pop stash@{0}
git stash list の結果を指定する。基本的に1個しか stash しないので引数は省略して使っている。

リモートブランチの操作

git push origin master
リモートリポジトリに変更を送信。リモートリポジトリにブランチがない場合はブランチを作ってくれる。
origin は リモートブランチの別名。
origin master を省略するとオプションによっては全ブランチを push したりして危険なので省略しないように気をつける。保険で git config –global push.default upstream している。
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
リモートブランチを削除した環境以外でリモートブランチが残っている場合、リモートブランチを削除。
git push –tags
リモートリポジトリにタグを送信
git remote set-url origin git@github.com:hoge/fuga.git
リモートリポジトリの URL を変更

変更をやり直す

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 の使い方

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
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
 ツイート 0  シェア 1  Google+1 0  Hatena 7