Think Twice
IT技術メモ | Gitのメモ
Created: 2010-11-07 / Updated: 2023-05-08

Gitコマンドのメモ


当メモは2010-11-07に投稿されたものを加筆修正し、再掲したものです。 基本的に当時の内容そのままとなっておりますので、8割りくらいは今でも通用すると思いますが、
廃止になっている機能もあるかもしれませんのでご注意下さい。

このリファレンスはGitのコマンドの網羅的な説明にはなっていません。
よく使う(と思われる)機能をさらっと調べるためのリファレンスですので、
より詳細な機能を調べる際にはGit ユーザマニュアル (バージョン 1.5.3 以降用)Gitマニュアルのリファレンスなどをご参照下さい。

目次


設定と初期化(config)

現在の設定のリストを出力する
Copy
git config --global -l
グローバルなユーザ名とメールアドレスを設定する
Copy
git config --global user.name "hoge"
git config --global user.email "hoge@hoge.com"
グローバルなユーザ名とメールアドレス設定を削除する
Copy
git config --global --unset user.name
git config --global --unset user.email
グローバルなコミットやタグのメッセージ編集用のエディタを設定する
Copy
git config --global core.editor emacs
特定のリポジトリ用のユーザ名とメールアドレスを設定する
Copy
$ cd /path/to/repo
git config user.name "hoge"
git config user.email "hoge@hoge.com"
特定のリポジトリ用のユーザ名とメールアドレス設定を削除する
Copy
$ cd /path/to/repo
git config --unset user.name
git config --unset user.email
特定のリポジトリ用のコミットやタグのメッセージ編集用のエディタを設定する
Copy
$ cd /path/to/repo
git config core.editor emacs
Gitの出力の色分けを有効にする
Copy
git config --global color.ui "auto"
日本語ファイル名がクォートされないように設定する
Copy
git config --global core.quotepath false
Copy
create mode 100644 "_draft/IT\351\226\242\351\200\243/access.md"
Gitコマンドのエイリアスを作る
Copy
git config --global alias.co 'checkout'
git config --global alias.st 'status'
git config --global alias.ci 'commit -a'
git config --global alias.di 'diff'
git config --global alias.br 'branch'

リポジトリの初期化(init, clone)

新しいリポジトリの初期化する
Copy
$ mkdir /path/to/repo
$ cd /path/to/repo
git init
(リポジトリを作ったよというメッセージ)
git add .
git commit -m "<メッセージ>"
(コミットができたよというメッセージ)
リポジトリのクローンを作る
Copy
git clone <リポジトリのURL>
(クローンできたよというメッセージ)
既存のディレクトリをGitリポジトリ化する
Copy
$ cd /path/to/existing/directory
git init
(リポジトリを作ったよというメッセージ)
git add .
git commit -m "<メッセージ>"
(コミットができたよというメッセージ)
新しいリモートリポジトリの追加する
Copy
git remote add <リモートリポジトリ名> <リポジトリのURL>

日常の作業(add, restore, commit, checkout, reset)

新しいファイルの追加や既存のファイルのステージをしてコミットする
Copy
git add <ファイル*>
git commit -m "<メッセージ>"
ファイルの一部をステージする
Copy
git add -p <ファイル*>
(コミットするハンクを選択)
対話的にファイルを追加する
Copy
git add -i
追跡しているファイルへの修正をすべてステージする
Copy
git add -u <パス*>

追加したファイルやディレクトリを取り消す
Copy
git restore --staged <パス*>
追加したすべてを取り消す
Copy
git restore --staged .

追跡しているファイルへの修正をすべてコミットする
Copy
git commit -m "<メッセージ>" -a
作業ツリーにおける変更を元に戻す
Copy
git checkout HEAD <ファイル*>
コミットしていないステージをリセットする
Copy
git reset HEAD <ファイル*>
--soft:HEADの位置のみ戻す
Copy
git reset --soft HEAD
--mixed:HEADの位置とステージング状態を戻す
Copy
git reset --mixed HEAD
または
git reset HEAD
--hard:HEADの位置とステージング状態と作業ディレクトリの編集内容を戻す(つまり編集内容を完全に捨てて戻す)
Copy
git reset --hard HEAD
直近のコミットを修正する
Copy
git commit -m "<メッセージ>" --amend
前回のコミットを修正する(コミットメッセージは再利用する)
Copy
git commit -C HEAD --amend

変更の退避(stash)

変更を退避する
Copy
git stash push
または
git stash
変更を退避するとき、addしたものは退避しない
Copy
git stash push -k
または
git stash push --keep-index
変更を退避するとき、新規作成されたファイルも一緒に退避する
Copy
git stash push -u
または
git stash push --include-untracked
-k-uは共存して指定させることもできます。
その場合、新規作成されたファイルは含めるけど、addしたものは退避しないという感じになります。2023-05-02 更新

変更を退避するときにメッセージも付けて退避する
Copy
git stash push -m "メッセージ"
または
git stash -m "メッセージ"
2023-05-03 更新

退避した作業の一覧を見る
Copy
git stash list
退避した作業を戻す
Copy
git stash apply <スタッシュ名>
退避した作業をaddした状態のまま戻す
Copy
git stash apply <スタッシュ名> --index
退避した作業を消す
Copy
git stash drop <スタッシュ名>
退避した作業をすべて消す
Copy
git stash clear
退避した作業を元に戻すと同時に、stashのリストからも消す
Copy
git stash pop <スタッシュ名>
または
git stash pop
退避した変更のファイル一覧を見る
Copy
git stash show <スタッシュ名>
退避した変更の詳細を見る
Copy
git stash show <スタッシュ名> -P

参考


ブランチ(branch, merge, cherry-pick)

ローカルのブランチを表示する
Copy
git branch
リモートのブランチだけを表示する
Copy
git branch -r
ローカルとリモートのブランチをすべて表示する
Copy
git branch -a
現在のブランチから新しいブランチを作る
Copy
git branch <新しいブランチ名>
別のブランチをチェックアウトする
Copy
git checkout <ブランチ名>
現在のブランチから新しいブランチを作り、ついでにチェックアウトまでする
Copy
git checkout -b <ブランチ名>
別の時点を起点にしたブランチを作る
Copy
git branch <新しいブランチ名> <起点>
ブランチの移動または名前の変更
Copy
git branch -m <既存のブランチ名> <新しいブランチ名>
ブランチの名前変更(強制)
Copy
git branch -M <新しいブランチ名>
別のブランチを現在のブランチにマージする
Copy
git merge <ブランチ名>
マージだけしてコミットしない(寸止め)
Copy
git merge --no-commit <ブランチ名>
強制的にマージコミットを作りながらマージ(ファストフォワードしない)
Copy
git merge --no-ff <ブランチ名>
特定のコミットのみ取り込む(チェリーピック)
Copy
git cherry-pick <コミット名>
特定のコミット範囲(Aの一つ後~Bまで)のみ取り込む(チェリーピック)
Copy
git cherry-pick <コミットA>..<コミットB>
特定のコミット範囲(AからBまで)のみ取り込む(チェリーピック)
Copy
git cherry-pick <コミットA>^..<コミットB>
チェリーピックだけしてコミットしない(つまみ食いの寸止め)
Copy
git cherry-pick -n <コミット名>
または
git cherry-pick --no-commit <コミット名>
マージ済みのブランチ一覧を表示する
Copy
git branch --merged
未マージのブランチ一覧を表示する
Copy
git branch --no-merged
1つのブランチの履歴を圧縮して別の履歴にする
Copy
git merge --squash <ブランチ名>
git commit
ブランチを削除する
Copy
git branch -d <削除するブランチ名>
ブランチをなにがなんでも削除する
Copy
git branch -D <削除するブランチ名>

参考


タグ(tag)

タグを表示する
Copy
git tag
タグを付ける
Copy
git tag <タグ名>
別の時点のコミットにタグを付ける
Copy
git tag <タグ名> <コミット名>
タグを削除する
Copy
git tag -d <タグ名>
タグをoriginにpushする
Copy
git push origin <タグ名>
タグをoriginにpushする(強制上書き)
Copy
git push origin <タグ名> -f
originのタグを削除する
Copy
git push origin :<タグ名>
または
git push --delete origin <タグ名>

参考


履歴(log, diff)

履歴をすべて表示する
Copy
git log
変更を示すパッチと一緒にログを表示する
Copy
git log -p
表示するログをひとつに限定する
Copy
git log -1
表示するログを20個に限定し、パッチも表示する
Copy
git log -20 -p
過去6時間のコミットを表示する
Copy
git log --since="6 hours"
2日以上前のコミットを表示する
Copy
git log --before="2 days"
HEADから3つ前のコミットのログだけを表示する
Copy
git log -1 HEAD~3
または
git log -1 HEAD^^^
または
git log -1 HEAD~1^^
2つの時点間のコミットを表示する
Copy
git log <起点>...<終点>
ログの履歴を1行ずつで表示する
Copy
git log --pretty=oneline
ログをグラフで表示する
Copy
git log --graph

ログのグラフで表示する(履歴は1行で表示)
Copy
git log --graph --pretty=oneline
なお、--graphについてはこちら紹介されている以下のエイリアスを設定するとキレイなグラフが簡単に見れるようになります。

.gitconfig
Copy
[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
  lga = log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
ログのエントリごとに影響を受けた行の統計情報を表示する
Copy
git log --stat
コミットにより影響を受けたファイルの状態を表示する
Copy
git log --name-status
現在の作業ツリーのステージングエリアとの差分を表示する
Copy
git diff
ステージングエリアとリポジトリとの差分を表示する
Copy
git diff --cached
作業ツリーとリポジトリとの差分を表示する
Copy
git diff HEAD
作業ツリーと以前のリポジトリとの差分を表示する
Copy
git diff <起点>
リポジトリの2つの時点間での差分を表示する
Copy
git diff <起点> <終点>
差分の統計情報を表示する
Copy
git diff --stat <起点> [<終点>]
指定したファイルについて、コミットの情報を注釈付きで表示する
Copy
git blame <ファイル>
ファイル内でのコピペおよび行の移動を含めて、コミットの情報を注釈付きで表示する
Copy
git blame -M <ファイル>
行の移動とオリジナルのファイルを表示して、コミットの情報を注釈付きで表示する
Copy
git blame -C -C <ファイル>
ログの中でコピペについて表示する
Copy
git log -C -C -p -1 <起点>

リモートリポジトリ(remote)

リポジトリのクローンを作る
Copy
git clone <リポジトリのURL>
リポジトリのクローンを作るが、直近の200コミットだけをダウンロードする
Copy
git clone --depth 200 <リポジトリのURL>
新しいリモートリポジトリを追加する
Copy
git remote add <新しいリモートリポジトリ名> <リポジトリのURL>
リモートブランチをすべて表示する
Copy
git branch -r
リモートブランチからローカルブランチを作る
Copy
git branch <新しいブランチ名> <リモートブランチ名>
リモートタグからローカルブランチを作る
Copy
git branch <新しいブランチ名> <リモートタグ名>
originリポジトリから変更を取得するが、ローカルブランチにはマージしない(寸止め)
Copy
git fetch
origin以外のリモートリポジトリから変更を取得するが、ローカルブランチにはマージしない(寸止め)
Copy
git fetch <リモートリポジトリ名>
リモートリポジトリから変更を取得し、現在のブランチにマージする
Copy
git pull <リモートリポジトリ名>
originリポジトリから変更を取得し、現在のブランチにマージする
Copy
git pull
ローカルブランチを同じ名前のリモートブランチにプッシュする
Copy
git push
ローカルブランチをリモートブランチにプッシュする
Copy
git push <リモートリポジトリ名> <ローカルブランチ名>:<リモートブランチ名>
リモートブランチを削除する
Copy
git push <リモートリポジトリ名> :<リモートブランチ名>
古くなったリモートブランチを取り除く
Copy
git remote prune <リモートリポジトリ名>
リモートリポジトリと、それに関係するブランチをすべて取り除く
Copy
git remote rm <リモートリポジトリ名>

サブモジュール(submodule)

※以下コマンドはワーキングツリーのトップレベル(.gitのあるディレクトリ)で実行する必要があります。
サブモジュールを作成する
Copy
git submodule add <リポジトリのURL> <クローン先のパス>
git commit -m 'add submodule'
サブモジュールを確認する
Copy
git submodule
サブモジュールを初期化する
Copy
git submodule init <サブモジュールのパス>
サブモジュールを更新する
Copy
git submodule update <サブモジュールのパス>

GitとSubversionの橋渡し(svn)

Subversionリポジトリ全体のクローンを作る
Copy
git svn clone <Subversionのリポジトリ>
標準のレイアウトを持つSubversionのリポジトリ全体のクローンを作る
Copy
git svn clone -s <Subversionのリポジトリ>
標準のレイアウトではないSubversionのリポジトリ全体のクローンを作る
Copy
git svn clone -T <trunkのパス> \
              -b <branchesのパス> \
              -t <tagsのパス> \
              <Subversionのリポジトリ>
標準のレイアウトを持つSubversionのリポジトリのリビジョン1234のクローンを作る
Copy
git svn clone -s -r 1234
標準のレイアウトを持つSubversionのリポジトリからクローンを作り、リモートブランチにすべてプレフィックスを付ける
Copy
git svn clone -s --prefix svn/ <Subversionのリポジトリ>
上流のSubversionのリポジトリから更新を取得してリベースする
Copy
git svn rebase
上流のSubversionのリポジトリに変更をプッシュして戻す
Copy
git svn dcommit
上流にプッシュされるコミットの一覧を表示する
Copy
git svn dcommit -n
リポジトリのSubversionログを表示する
Copy
git svn log
ファイルのsvn blameを表示する
Copy
git svn blame <ファイル>

参考

元記事

関連メモ

参照

参考サイト

参考書籍

Special thanks