Git
git init
リポジトリを作成する
git init
リモートリポジトリ用のbareリポジトリを作成する
git init --bare
git clone
リモートからリポジトリを取得する
git clone [リモートリポジトリのURL]
指定した名前でリモートからリポジトリを取得する
git clone [リモートリポジトリのURL] [リポジトリのディレクトリ名]
git branch
ブランチの一覧表示
git branch
ブランチの一覧表示(リモートブランチも表示)
git branch -r
ブランチの名前を変更
git branch -m [現在のブランチ名] [変更したいブランチ名]
ブランチを削除(ローカルブランチ)
git branch -D [ブランチ]
ブランチを削除(リモートブランチ)
git push origin --delete [ブランチ]
git checkout
ブランチを切り替える
git checkout [ブランチ名]
ブランチを作成と切り替えを同時に行う
git checkout -b [ブランチ名]
指定したファイルを指定したリビジョンに切り替える
git checkout [ハッシュ] [ファイル名]
リモートリポジトリにあるブランチに切り替える
- (1)
git fetch
でリモートブランチを取得
git fetch origin [リモートブランチ]
- (2)
git fetch
してきたブランチに切り替え
git checkout [ブランチ]
git diff
コミット前のファイルの差分を確認
git diff
git addしたファイルの差分を確認
git diff --cached
コミット同士を比較
git diff [変更前のハッシュ] [変更後のハッシュ]
リモートとローカルの差分を確認
# ローカルでコミットした後など、ローカルの方が新しい事が想定される場合
git diff [リモートブランチ]..HEAD
# リモートからプルする前など、ローカルの方が古い事が想定される場合
git diff HEAD..[リモートブランチ]
最新のコミットの差分を確認
git diff HEAD^
ブランチ間の差分を確認
git diff [ブランチA]..[ブランチB]
差分のあるファイル名のみ表示
git diff --name-only
改行コードや空白を無視
git diff -w
空行を無視
git diff --ignore-blank-lines
git add
ワークツリーの変更をステージングエリアに追加
git add [ファイル名]
- ワークツリー -- 作業中ディレクトリ
- ステージングエリア(インデックス)-- コミット対象ファイル群(を管理するgitの内部データ)
全てのワークツリーの変更をステージングエリアに追加
git add -A
関連
- ステージングエリアに追加したファイルを取り消す →
git reset
- ワークツリー/ステージングエリアの状態を表示 →
git status
git stash
変更中のファイルを一時的に退避させる
git stash
- ワークツリーとステージングエリアの変更中ファイルを退避できる
退避しているファイルのリストを表示
git stash list
退避しているファイルを戻す
git stash pop
git reset
ステージングエリアに追加したファイルを取り消す
git reset [ファイル]
- ファイルを指定しないと全てのファイルがステージングエリアから削除される(取り消される)
特定のコミットに戻す
git reset [ハッシュ]
コミットを取り消す
git reset --soft [ハッシュ]
git reset --hard [ハッシュ]
-
HEAD
の位置とインデックスを変更(変更したファイルは消える)
直前のコミットを取り消す
git reset [--hard|--soft] HEAD^
git resetを取り消す
git reset --hard ORIG_HEAD
git status
ワークツリーの状態を表示
git status
git commit
ステージングエリアのファイルをコミットする
git commit
コミットとコミットメッセージの追加を同時に行う
git commit -m [コミットメッセージ]
空のコミットを作成する
git commit --allow-empty
- 変更差分の無いコミットを作成する
- リポジトリの最初のコミットなどに使う
直前のコミットを修正する
git commit --amend
- 直前のコミット内容を変更できる(コミットメッセージの変更など)
- 注意:リモートにプッシュする前のみの利用を推奨(プッシュ後の--amendはforce pushで歴史改変する必要がある)
git tag
現在のコミットにタグを打つ
git tag [タグの名前]
指定したコミットにタグを打つ
git tag [タグの名前] [ハッシュ]
タグを削除
git tag -d [タグの名前]
タグをリモートにプッシュ
git push [タグの名前]
- タグは明示的に
push
しないとリモートにアップロードされない
タグの一覧を表示
git tag
- 何もオプションを付けない場合、タグの一覧を表示できる
git mv
ファイルの移動/ファイル名の変更
git mv [対象ファイル] [移動先/変更後ファイル名]
- リポジトリに登録されているファイルを移動/リネームできる
- 内部的には
mv
→ git rm 元ファイル
→ git add 新ファイル
のように動く
git rm
ファイルの削除
git mv [対象ファイル]
git fetch
リモートリポジトリから履歴を取得
git fetch
- リモートリポジトリのコミットログを取得する(ローカルのファイルは変更されない)
git pull
リモートリポジトリから履歴を取得して変更をマージする
git pull [リモートブランチ]
- リモートリポジトリの変更がローカルのリポジトリに取り込まれる(変更が重複しているとコンフリクトが起きる)
git push
リモートリポジトリへローカルの内容をアップロードする
git push [リモートブランチ]
- ローカルリポジトリのコミットをリモートにアップロードする
リモートリポジトリへ強制的にアップロードする(歴史改変)
git push -f [リモートブランチ]
- 既にプッシュ済みのコミットログを強制的にリモートへプッシュする(歴史改変)
- 極力避けるべき
リモートリポジトリを削除する
git push origin --delete [リモートブランチ]
git merge
現在のブランチに指定したブランチの内容をマージ
git merge [ブランチ]
マージ時にコミットしない(ドライラン)
git merge --no-commit [ブランチ]
git clean
リポジトリで管理されていないファイルを削除
git clean -dfx
- リポジトリに登録されていない作業中のファイルを全て消すことができる
- オプションの意味は「再帰的に」「ディレクトリも含めて」「.gitignoreの対象ファイルも含めて」全て消す
ドライラン
git clean -n
git revert
既存のコミットを取り消す
git revert [ハッシュ]
- 指定されたコミットを打ち消すコミットが新たに作成される
打ち消しコミットを作るが、コミットはしない
git revert -n [ハッシュ]
- 指定されたコミットを打ち消す変更が作られるが、コミットはされない
- 複数の
revert
を行ってまとめてコミットしたい時に使う
マージコミットの打ち消し
git revert -m [1|2] [ハッシュ]
- マージコミットを取り消す場合、マージしたコミットのどちらを取り消すか指定する必要がある
- 戻したいコミットを数字(1or2)で指定する
- コミットの確認は
git log
で行う
git log
commit xxxxxxxxx
Merge: yyyyy zzzzz # <= コミットハッシュの並び順に1、2...となる
Author: xxx xxx
Date: Fri Jan 1 00:00:00 2010 +0900
git rebase
コミットログを修正する
git rebase -i [コミット]
git cherry-pick
指定したコミットをマージする
git cherry-pick [コミット]
git cherry-pick [コミット] [コミット] ...
cherry-pickするがコミットしない
# もしくは --no-commit
git cherry-pick -n [コミット]
-
-n
オプションを使うとコミットされずワーキングスペースのファイルが変更されただけの状態になる
- 復数のコミットをcherry-pickした後、1回のコミットにしたい時に使う
git log
コミット履歴を表示する
git log
diffを一緒に表示
git log -p
変更状況を一緒に表示
git log --stat
コミットグラフを表示
git log --graph
コミットログの時間をISO8061形式に変更する
git log --date=iso
- 日付形式が
YYYY-MM-DD HH:MM:SS
に変わる
コミットログの出力フォーマットを指定する
git log --pretty=[フォーマット]
お気に入りフォーマット
git log --date=iso --pretty=format:"[%ad] %h %an : %s"
- ↓のように一行ずつ出力される
[2015-04-01 00:00:00 +0900] xxxxxxx USER : MESSAGE
参考資料