概要
みなさん、Git使ってますか?
もしくは、使いこなしていますか?
独習Gitを読んで、思いの外Gitコマンドが多かったので、
タイトルの通り、Gitコマンドで100本ノックをまとめてみました。
Gitの環境構築が終わっている状態からを想定しています。
git init
でローカルにリポジトリを用意してください。
問題に対して、直後に回答を載せる形式にしています。
Git初心者の方も、目を通して知らないオプションをググれば勉強になると思います。
参考文献
100本ノック
Gitに馴染む
1. メールアドレスをGitのグローバル設定に追加
git config --global user.email "Your E-mail@example.com"
2. user.nameの設定値を表示
git config user.name
3. user.emailの設定値を表示
git config user.email
4. Gitヘルプシステムのヘルプ
git help help
5. Gitで利用できる全コマンドのリスト
git help -a
6. すべてのGitコマンドをページで表示
git --paginate help -a
7. すべてのGitガイドを表示
git help -g
8. Gitの用語集(glossary)を表示
git help glossary
リポジトリの作り方と使い方
9. カレントディレクトリ内のGitリポジトリを初期化
git init
10. Gitに関するカレントディレクトリの状態を表示
git status
11. ファイルをGitに追跡させる(ファイルはステージングエリアに追加される)
git add FILE
12. 変更をGitリポジトリにコミットし、メッセージを付ける
git commit -m "Message"
13. Gitリポジトリのログ(ヒストリー)を表示
git log
14. ログとともに、変更されたファイルを表示する
git log --stat
15. リポジトリ内のファイルをリスト表示
git ls-files
ファイルの追跡と更新
16. カレントディレクトリ内で追跡されているファイルと、リポジトリ内のファイルとの間に変更があれば、それを示す
git diff
17. git addを実行してから、ログメッセージとともにgit commitを実行する
git commit -a -m "Message"
18. ステージングエリアとリポジトリの間に変更があれば、それを示す
git diff --staged
19. git addで何が実行されるかを示す
git add --dry-run .
20. カレントディレクトリ内の新しいファイルをすべて追加する
git add .
21. 履歴をコミットごとに1行で表示し、各コミットで変更されたファイルのリストを1行で表示する
git log --shortstat --oneline
変更箇所をコミットする
22. ファイルを作業ディレクトリとステージングエリアから削除(remove)する
git rm FILE
23. 作業ディレクトリとステージングエリアで、FILE1の名前をFILE2に変更する
git mv FILE1 FILE2
24. ステージングエリアに追加(add)すべき変更部分を手作業で選択(pick)する
git add -p
25. ステージングエリアをリセット(reset)して、ファイルをコミット予定から外す
git reset FILE
26. ファイルの「最後にコミットしたバージョン」をチェックアウトして、localの作業ディレクトリに入れる
※まだcommitしていないファイルの差分が消えます
git checkout FILE
Gitというタイムマシン
27. ヒストリー表示。個々のコミットで、親コミットのSHA1 IDも表示する。
git log --parents
28. ヒストリー表示。個々のコミットで、親コミットのSHA1 IDも短縮表示する。
git log --parents --abbrev-commit
29. ヒストリーを簡潔に(各コミットを1行で)表示する
git log --oneline
30. ヒストリー表示。個々のコミットにおけるファイルの差分を示す。
git log --patch
31. SHA1_IDにタグを付ける。タグ名にTAG_NAME、メッセージにTAG_MESSAGEを使う
git tag -a TAG_NAME -m TAG_MESSAGE SHA1_ID
32. ヒストリー表示。patchとstatの出力を組み合わせる。
git log --patch-with-stat
33. ブランチ名を、特定のSHA1 IDに変換する(tagでもできる)
git rev-parse BRANCH
34. 作業ディレクトリを、YOUR_SHA1_IDで指定されたバージョンと一致するものに変更する
git checkout YOUR_SHA1_ID
35. YOUR_SHA1IDを参照するTAG_NAMEという名のタグを作る。このタグには短いメッセージ(MESSAGE)が割り当てられる
git tag TAG_NAME -m "MESSAGE" YOUR_SHA1ID
36. すべてのタグのリストを出力する
git tag
37. TAG_NAMEというタグに関する情報を示す
git show TAG_NAME
ブランチ(支線)を辿る
38. すべてのブランチのリストを表示
git branch
39. BRANCHという名前のブランチを新規に作成する
git branch BRANCH
40. 作業ディレクトリを変更して、BRANCHという名前のブランチを反映させる
git checkout BRANCH
41. リポジトリの履歴をすべてのブランチを通じて閲覧する
git log --graph --decorate --pretty=oneline --all --abbrev-commit
42. git logコマンドのためにlolという名前の別名(alias)を作る(logのオプションは任意)
git config --global alias.lol "log --graph --decorate --pretty=oneline --all --abbrev-commit"
43. すべてのブランチのリストをSHA1ID情報を付けて表示
git branch -v
44. YOUR_SHA1IDを開始地点としてブランチNEW_BRANCHを作る
git branch NEW_BRANCH YOUR_SHA1ID
45. BRANCH_BASEを開始地点としてBRANCH_NEWを作り、即座にチェックアウトする
git checkout -b BRANCH_NEW BRANCH_BASE
46. これまでに(git checkoutやgit reset等によって)行ったブランチ切替のすべての記録を表示する
git reflog
47. 現在進行中の作業(WIP)をスタッシュ(安全な隠し場所)に入れて、git checkoutを実行できるようにする
git stash
48. スタッシュに対比させたWIPのリストを表示
git stash list
49. 最後にスタッシュに入れた内容を現在の作業ディレクトリに反映させ、スタッシュから消去する
git stash pop
ブランチをマージ(統合)する
50. 2本のブランチ間の差分を最初に違いが現れた場所から相対的に示す
---X---------BRANCH1
\
--------BRANCH2
git diff BRANCH1...BRANCH2
51. YOUR_SHA1_IDを開始地点としてブランチNEW_BRANCHを作る
git branch NEW_BRANCH YOUR_SHA1_ID
52. BRANCHを現在の(カレント)ブランチにマージする
git merge BRANCH
53. git log -n 1の短縮形(最新のコミットだけを表示する)
git log -1
54. BRANCH1とBRANCH2に共通するベースコミットを表示する
git merge-base BRANCH1 BRANCH2
クローン(複製)を作る
55. ソースの位置にあるGitリポジトリのクローンを、複製先ディレクトリに作る
git clone SOURCE DESTINATION_DIR
56. すべてのブランチから、すべてのコミットログエントリを表示する(通常のgit logは、カレントブランチからのエントリだけを表示する)
git log --oneline --all
57. ローカルブランチだけでなく、リモート追跡ブランチも表示する
git branch --all
58. SOURCEにあるGitリポジトリのクローンを、複製先ディレクトリに、ペアリポジトリとして作る(複製先ディレクトリの名前は、規約に従って .gitで終わるようにする)
git clone --bare SOURCE DESTINATION_DIR
59. HEADのすべてのファイルを表示する
git ls-tree HEAD
リモートとの共同作業
60. masterブランチをチェックアウトする。現在のブランチに変更があれば、それらは破棄される。
git checkout -f master
61. 現在のリポジトリにあるリモートの名前を表示する
git remote
62. リモートの名前を、対応するリモートURLとともに表示する
git remote -v show
63. BOBという名前のリモートを追加する。そのリモートは、ローカルリポジトリ../math.bobを指し示す。
git remote add BOB ../math.bob
64. リモートリポジトリREMOTEのリファレンスを表示する(現在のローカルリポジトリを指定するには、REMOTEとして . を使う)
git ls-remote REMOTE
65. リモートとのネットワーク通信の内容を表示する
GIT_TRACE_PACKET=1 git ls-remote REMOTE
変更をプッシュ(送出)する
66. masterブランチをoriginという名前のリモートにプッシュする
git push origin master
67. 現在のブランチを、デフォルトのリモート追跡ブランチにプッシュする。デフォルトは、git checkoutまたはgit push --set-upstreamにより設定される
git push
68. ORIGINという名前のリモートにあるNEW_BRANCHへのリモート追跡ブランチを作成する
git push --set-upstream ORIGIN NEW_BRANCH
69. 名前にBRANCHという言葉が含まれているGit構成設定のリストを表示する
git config --get-regexp BRANCH
70. BRANCHという名前のローカルブランチを削除する
git branch -d BRANCH
71. REMOTE_BRANCHという名前のリモートブランチを、originという名前のリモートから削除する
git push origin :REMOTE_BRANCH
72. SHA1IDにタグを付ける。タグ名にTAG_NAME、メッセージにTAG_MESSAGEを使う
git tag -a TAG_NAME -m TAG_MESSAGE SHA1ID
73. TAGNAMEという名前のタグを、originという名前のリモートにプッシュする
git push origin TAGNAME
74. すべてのタグをデフォルトのリモートにプッシュする
git push --tags
75. originという名前のリモートから、TAGNAMEという名前のタグを削除する
git push origin :TAGNAME
76. ローカルリポジトリから、TAGNAMEという名前のタグを削除する
git tag -d TAGNAME
77. Git構成のpush.defaultを、simpleという値に設定する。これは、アクセスできるすべてのリポジトリに(グローバルに)設定される
git config --global push.default simple
同期を保つ(プル)
78. リポジトリと上流リポジトリと同期させる(git fetchとgit mergeの2つで構成される)
git pull
79. リモートリポジトリから新しいコミットが取り込まれ、リモート追跡ブランチが更新される
git fetch
80. FETCH_HEADからの新しいコミットを、カレントブランチにマージする
git merge FETCH_HEAD
81. --ff-onlyスイッチを指定すると、FETCH_HEADがカレントブランチの子孫である場合に限り、マージが許可される(fast-forwardマージ)
git pull --ff-only
ソフトウェア考古学(ログ)
82. マージの結果であるコミットのリストを表示
git log --merges
83. FILEに影響を与えたコミットのリストを表示
git log --oneline FILE
84. コミットメッセージがSTRINGを含んでいるコミットのリストを表示
git log --grep=STRING
85. 2つの日付の間に作られたコミットのリストを表示
git log --since MM/DD/YYYY --until MM/DD/YYYY
86. 著者名によるコミットの要約
git shortlog
87. 著者名によるコミットの要約で、メールアドレスも表示する
git shortlog -e
88. AUTHORを著者とするコミットのリスト(名前とメールアドレスを表示)
git log --author=AUTHOR
89. 現在のコミットと、その親の間にあるコミット(と、そのファイル)のリスト
git log --stat HEAD^..HEAD
90. 現在のコミットと、その親の間にあるコミット(と、テキストの変更)のリスト
git log --patch HEAD^..HEAD
91. すべてのブランチのリストをコラムに分けて表示する
git branch --column
92. 指定したSHA1_IDの名前を最も近いブランチをベースとして表示する
git name-rev SHA1_ID
93. 指定のSHA1_IDを含む、すべてのブランチを識別する(-rはリモート追跡ブランチを指定する。これを略すとローカルブランチだけが表示される)
git branch -r --contains SHA1_ID
94. STRINGを含む、すべてのファイルを探し出す
git grep STRING
95. FILEのblame出力をコマンドラインで表示する
git blame FILE
※ @culage 様より、 git gui blame FILE
を使うと見やすいそうです!
96. FILEのblame出力をコマンドラインで、FILE-annotateに保存する
git --no-pager blame FILE > FILE-annotate
git rebaseを理解する
97. masterブランチの先で、BRANCHブランチまでにあるコミットを表示
git log --oneline master..BRANCH
98. カレントブランチをmasterの最新コミットにリベースする
git rebase master
99. HEAD@{n}によって表現されるSHA1_IDを指し示すように、HEADをステージングエリアと作業ディレクトリの両方でリセットする
git reset --hard HEAD@{n}
100. masterの最新コミットをカレントブランチに、対話処理でリベースする。これによってエディタが開き、どのコミットをリベースに含めるかの取捨選択が可能となる
git rebase --interactive master
101. 指定のコミットをカレントブランチにコピーする
git cherry-pick SHA1_ID
ワークフローとブランチの規約
102. ファイルの追加なしにコミットを作る
git commit --allow-empty -m "initial commit"
103. BRANCHをカレントブランチにマージし、たとえfast-forwardであっても、マージコミットを作成する
git merge --no-ff BRANCH
Gitを研ぎ澄ませる
104. ローカル(リポジトリ固有の)Git構成をリストで表示
git config --local --list
105. グローバル(ユーザー固有の)Git構成をリストで表示
git config --global --list
106. システム(サーバー全体の)Git構成をリストで表示
git config --system --list
107. 相対的な日付フォーマットで最後の2つのコミットを表示
git -c log.date=relative log -n 2
108. 相対的な日付フォーマットをローカルGit構成に保存
git config --local log.date relative
109. ローカル(リポジトリ固有の)Git構成を編集する
git config --local --edit
110. グローバル(ユーザー固有の)Git構成を編集する
git config --global --edit
111. システム(サーバー全体の)Git構成を編集する
git config --system --edit
112. ローカルGit構成ファイルの名前をプリントする
git -c core.editor=echo config --local --edit
113. ローカルGit構成vimで編集する
git -c core.editor=vim config --local --edit
114. Git構成core.excludesfileの設定値をプリントする
git config core.excludesfile
最後に
100本ノックといいながら114本用意してしまいました。