TortoiseGit(GUI)は便利ですが、よく進捗がわからない、レスポンスが遅い、などの弱点もあることから、基礎的なコマンドに絞った表を、備忘録を兼ねて整理します。
基礎的な考え方
Gitの考え方として、最低限抑えておかない定義として、領域があります。
領域表
| 領域 | どこにある? | 役割 |
|---|---|---|
| ①Working Directory | ローカル(実際のファイル) | 編集する場所 |
| ②Staging Area | ローカル(.git/index) | commitする前の一時置き場(addした状態) |
| ③Local Repository | ローカル(.git) | commitの履歴が保存される |
| ④Remote Repository | サーバー側(GitLab、GitBucket、GitHubなど) | pushした履歴が保存される |
イメージテキスト図
[Working Directory] ← 編集する場所
|
| git add
↓
[Staging Area](.git/index)
|
| git commit
↓
[Local Repository](.git)
|
| git push
↓
[Remote Repository] サーバー側(GitLab、GitBucket、GitHubなど)
コマンド表(基礎)
| コマンド | 詳細 |
|---|---|
| git add [ファイル名] | [ファイル名]を、git配下[stage]に登録 |
| git add -u | 変更された既存ファイルだけを、git配下[stage]に登録 |
| git add ./git add -A | 新規ファイルも含めて、全部[stage]に登録 |
| git status | stageと、ローカルリポジトリの差分を表示 |
| git commit | stageへの反映を、ローカルリポジトリに反映(※注意 通常はcommitメッセージを記載しないとcommitされない) |
| git push | ローカルリポジトリからリモートリポジトリ(orign)に反映 |
| git diff/git diff --staged | 今、HEADがbranchBにいたとして、このコマンドを打つと、HEADの作業ツリーと、[branch名]の最新commit(ローカルリポジトリ)を比較 |
| git diff --cached [branch名] | 今、HEADがbranchBにいたとして、このコマンドを打つと、HEADの作業ツリーと、[branch名]のstageを比較 |
| git diff HEAD | 作業ツリーと、HEAD(すなわち、今checkoutしている最新commit=localリポジトリ)を比較 HEAD補足 A → B → Cでcommitされたとし、今はCであるとすると、 HEAD^ = HEAD~1 (すなわち、Bの位置であり、1つ前のcommit) HEAD^^ = HEAD~2 (すなわち、Aの位置であり、2つ前のcommit) 使用例 git show [HEAD^^]、git diff [HEAD^]、git checkout [HEAD~1] git checkout HEAD@{3} |
| git log | ログの表示、commitがハッシュで表示される |
| git log --oneline | ログの表示、commitハッシュと、commitメッセージで表示 |
| git log [ファイル名] | [ファイル名]に絞り、ログを表示 |
| git diff [commitハッシュ1] [commitハッシュ2] | commit1と、commit2の差分表示 ※ ハッシュは、--onelineで表示される先頭6文字で可能 |
| git diff [commitハッシュ1] [commitハッシュ2] [ファイル名] | [ファイル名]に絞り、commit1と、commit2の差分表示 |
| git diff [commitハッシュ] HEAD | commit1と、HEADの差分表示 他使用例:git diff HEAD^ HEAD |
| git show | コミット情報表示 |
| git show [commitハッシュ][ファイル名] | commitハッシュのコミット情報表示 |
| git ls-files [-s] | ステージの内容を表示 [-s] 付けると、詳細(ハッシュ付き)表示 |
| git reset | ステージへのaddをなかったことにする |
| git reset -- [ファイル名] | [ファイル名]のステージへのaddをなかったことにする |
| git reset --hard | [作業ツリーの内容を、HEAD(stageの内容)の状態に残す ※作業ツリーの内容が書き換わる |
| git reset --soft HEAD^ | 直前のcommitをなかったことにする |
| git checkout -- [ファイル名] | stageから、[ファイル名]をcheckoutする ※作業ツリーの内容が書き換わる |
| git mv [旧ファイル名] [新ファイル名] | ファイル名の変更 |
| git rm [ファイル名]/git rm -r [フォルダ名] | stageから、[ファイル名]やフォルダを削除する ※まず、作業ツリーで削除し、git rm後には同期が取られた状態にしないとエラーになる |
| git checkout [commitハッシュ] -- [ファイル名] | 該当のcommitから、checkout(stageと作業ツリーにcheckout)、branchも(HEAD detatched コミット)などに変更 ※ファイル名がない場合は、commitに該当するファイル全てをcheckout commitにあり、作業ツリーにない場合は追加、同名ファイルがある場合上書き、作業ツリーにあり、commitにないファイルは作業ツリーから削除される |
コマンド表(branch基礎)
| コマンド | 詳細 |
|---|---|
| git branch | HEADがどのbranchにいるか確認 |
| git checkout [branch名] | HEADで、branchの切り替え |
| git merge [branch名] | [branch名]から、HEADにmerge |
最後に
今回は、branchの続きと、ちょっとした応用編の記事を書ければと思います。