はじめに
右側の目次からお探しの用語やコマンドをクリックしてお使いください!
対象となる読者
- Gitを触り始めたばかりの初心者の方
- 復習も兼ねて基本操作を中心におさらいしたい経験者の方
- オプションや引数など細かいところを思い出したい方
ローカルリポジトリを作成 git init
git init
プロジェクトのディレクトリに移動し実行
.git という名前の新しいサブディレクトリが作成されます。
既存のリポジトリをクローン git clone
git clone [URL or SSH]
https:// プロトコルに加え、SSH プロトコルを使用し、git:// や user@server:/path/to/repo.git といった形式を使うこともできます。
インデックスに追加する git add
git add [ファイル名]
git add -u
git add -A
git add .
-u
はバージョン管理されていて、変更があったすべてのファイルがaddされます。(新しく作られたファイルはaddされません)
-A
は変更があったすべてのファイルがaddされます。
.
はカレントディレクトリ以下の、変更があったすべてのファイルがaddされます。
インデックスに追加したくないファイルは.gitignore
に記述する事で、追跡対象から外すことができます。
ファイルの状態を確認 git status
git status
git status -s
今いるブランチの場所と、コミットに関する情報、該当するファイルの状態が表示されます。
コミットに関する情報
- nothing to commit → ワーキングツリーとインデックスに対して変更がない
- Untracked files → ワーキングツリーに存在するがステージされていない
- Changes to be committed → ファイルがステージされている
- Changed but not staged for commit → 追跡対象のファイルがワーキングツリーで変更されたが、まだステージされていない
該当するファイルの状態
- new file → インデックスに新しく追加されたファイル
- modified → 修正があったファイル
- deleted → 削除したファイル
ショートオプション
-s
オプションで、簡略化して表示することができます。
ファイル名の左側に、ファイルの状態や変更されたかどうかを示す文字列が表示されます。
- ?? → まだステージされていない新しいファイル
- A → ステージングエリアに追加されたファイル
- M → 修正されたファイル
変更されたファイルの差分を確認 git diff
git diff → 変更したけれどもまだステージされてない内容を確認
git diff --stagedまたは--cached → コミットに含めるべくインデックスに追加した内容を確認
git diff HEAD^ → 最後のコミットからの差分を確認
git diff --name-only → 差分があるファイル名を確認
ファイルを削除 git rm
git rm [ファイル名]
git rm -f [ファイル名]
git rm --cached [ファイル名]
変更したファイルをすでにインデックスに追加している場合は、-f
オプションで強制的に削除しなければなりません。
ファイルを残したまま管理対象から外したい場合は、--cached
オプションをつけます。
コミットする git commit
git commit
git commit -m "メッセージ"
インデックスに追加した内容をリポジトリにコミット(登録)することができます。
-m
オプションでコミットにメッセージをつけることができます。
コミット履歴を閲覧 git log
git log
git log -p
git log --stat
git log --pretty=format:"%h - %an, %ar : %s"
git log --oneline --decorate
git log --oneline --decorate --graph --all
git log
でコミットの履歴を閲覧できます。
コミットのハッシュ値、誰が、いつ、コミットメッセージがあるならコミットメッセージも表示します。
詳しく見る git log -p
git logと同じ情報を表示するとともに各エントリの直後にその diff を表示します。git log -p -2
など引数を指定すると直近の2エントリだけを出力します。
統計情報を見る git log --stat
各コミットエントリに続けて変更されたファイルの一覧と変更されたファイルの数、追加・削除された行数が表示されます。 また、それらの情報のまとめを最後に出力します。
見やすく表示 git log --pretty=format:"%h - %an, %ar : %s"
$ git log --pretty=format:"%h - %an, %ar : %s"
c12e17c - コミット太郎, 13 hours ago : 競合を解決
a2f2c53 - コミ子, 3 days ago : Merge pull request #2 from komiko/branch-1
--pretty
オプションでログをデフォルトの書式以外で出力、format
オプションで独自のログ出力フォーマットを指定することができます。%h
はコミットのハッシュ (短縮版)、%an
はAuthor の名前、%ar
はAuthor の相対日付、%s
は件名(コミットメッセージ)を表しています。
他にも様々なオプションがあるようなので、用途に合わせて使ってみてください。
Git-book --pretty=format用の便利なオプション
コマンドが長いので~/.gitconfigにエイリアスを登録しておくと良さそうです。
git logを見やすくしたい! @forest1
コミット履歴をブランチとグラフを表示して確認 git log --oneline --decorate --graph --all
$ git log --oneline --decorate --graph --all
* d1c8d (HEAD, master) made other changes
| * 96ab3 (branch1) made a change
|/
* d45cd add feature #32 - ability to add new formats to the
コミットの歴史を表示するだけではなく、 ブランチポインタがどのコミットを指しているのかや、歴史がどこで分裂したのかも表示します。
コミットの詳細を確認 git show
git show
git show [SHA-1]
git show [タグ名]
最新のコミット内容を表示します。SHA-1(コミットごとのハッシュ値)や設定したタグを指定して見ることもできます。
リモートリポジトリへプッシュする git push
$ git push [リモートリポジトリ] [ブランチ]
ローカルリポジトリのコミットがリモートリポジトリに反映されます
ここでの[リモートリポジトリ]はgit remote add
で登録した時の名前です。
デフォルトのoriginで登録し、masterにpushしたい場合は、$ git push origin master
となります。
ブランチの一覧を表示する git branch
git branch → ローカルリポジトリのブランチ一覧を表示 + HEAD(今作業している場所)を表示
git branch [ブランチ] → 新しいブランチを作成
git branch -a → ローカル、リモートのブランチ一覧を表示 + HEAD(今作業している場所)を表示
git branch -r → リモートのブランチを表示
git branch -d [ブランチ] → ブランチを削除する
ブランチを切り替える git checkout
git checkout [ブランチ]
git checkout -b [ブランチ]
-b
オプションをつけると新しいブランチが作成され、そのブランチにHEADを切り替えます。
HEADとは
HEADは現在のブランチを指すブランチポインタです。
checkoutによってHEADを移動させると、2つの作業が行われます。1つはHEADポインタを移動させる。もう1つは作業ディレクトリ内のファイルを移動先のスナップショットの状態に戻します。 つまり変更があった場合ブランチを切り替えると、作業ディレクトリのファイルが変更されるということです。
ブランチを統合する(分岐した作業履歴を残す) git merge
git merge [ブランチ]
mergeの手順
git checkout [branch1] → branch1ブランチに移動
git commit -a -m "修正OK" → 変更をコミット
git checkout master → masterブランチに移動
git merge [branch1] → 差分をマージ
ブランチを統合する(分岐した作業履歴をひとつに統合する) git rebase
git rebase
rebase、fast-forward mergeの手順
$ git checkout branch1 → branch1ブランチに移動
$ git commit -a -m "修正OK" → 変更をコミット
$ git rebase master → 分岐した作業履歴をひとつに統合
$ git checkout master → masterブランチに移動
$ git merge branch1 → masterにも統合。(fast-forwardマージ)
リベースした結果の最後のコミットであっても、マージ後の最終のコミットであっても同じスナップショットになります。
違う点は、マージは分岐した作業履歴を残すのに対し、リベースは分岐した作業履歴をひとつに統合します。
fast-forward
あるコミットに対してコミット履歴上で直接到達できる別のコミットをマージしようとした場合、Git は単にポインタを前に進めるだけで済ませます。マージ対象が分岐しているわけではないからです。 この処理のことを “fast-forward” と言います。
Git-book ブランチとマージの基本
特定のコミットのみを指定し、統合する。 git cherry-pick
git cherry-pick [SHA-1] → 指定したコミットを統合する。
git logで正しいSHA-1(コミットごとのハッシュ値)を確認してから行いましょう。
リモートリポジトリからローカルリポジトリを更新する git pull
git pull [リモートリポジトリ] [ブランチ]
git pullは、git fetchとgit mergeを組み合わせたものです。
リモートリポジトリなど、他のリポジトリデータを取得 git fetch
git fetch [リモートリポジトリ] [ブランチ]
コミットはせずに変更を退避する git stash
git stash → 作業を退避させる(saveを省略していますが、保存できます)
git stash save "メッセージ" → メッセージをつけて退避させる
git stash list → 退避させたい作業の一覧を表示
git stash apply stash@{0} → 退避させた作業を戻す
git stash drop stash@{0} → 退避させた作業を消す
あるブランチで作業中だが、別ブランチで作業が必要になった。でもコミットできる状態じゃない場合、git stash
で退避させることができます。
作業を戻したり消したい場合は、git stash list
確認してから実行します。
$ git stash list
stash@{0}: On master: stash-test-2
stash@{1}: On master: stash-test
$ git stash apply stash@{0}
stash@{0}の作業を戻す
$ git stash list
stash@{0}: On master: stash-test-2
stash@{1}: On master: stash-test
git stash drop stash@{1}
stash@{1}を削除
$ git stash list
stash@{0}: On master: stash-test-2
コミットを取り消す(取り消した事を記録する) git revert
git revert [SHA-1]
取り消したことを記録するので、(新しくコミットを追加しているだけ)リモートにpushされたコミットに対しても安全に使うことができます。
コミットを取り消す(取消したことを記録しない) git reset
git reset --soft HEAD^
git reset --hard HEAD^
-
--soft
オプションはインデックスやワークツリーには触れずにコミットを削除します。 -
--hard
オプションはインデックスとワークツリーもリセットし、コミットを削除します。 -
HEAD^
は直前のコミットを指します -
HEAD~{n}
:n個前のコミットを指します。
※ git resetは取り消したことを記録しないので、リモートにpushされたコミットなどには使わないようにしましょう。
直近のコミットの変更、コミットメッセージの変更 git commit --amend
git commit --amend
実行するとテキストエディタが開き、直近のコミットメッセージ変更できます。
これは新しいコミットを作成して直近のコミットをそれで置き換えています。
さらにファイルなどを修正追加しステージグエリアに変更を加えてgit commit --amendを実行すると、これも新しいコミットを作成して直近のコミットをそれで置き換えています。コミットのSHA-1(コミットごとのハッシュ値)も変わるので、使う際には注意が必要です。
※ すでにプッシュしているコミットは書き換えないようにしましょう。
リモートリポジトリを追加 git remote add
git remote add [任意の名前] [リモートリポジトリパス] → リモートリポジトリを追加
git remote -v → 設定されているリモートリポジトリを参照します。
git remote rm [任意の名前] → リモートリポジトリの登録を削除します。
過去にコミットした履歴を見る git reflog
git reflog
実行すると、最近のコミットから順に、SHA-1(コミットごとのハッシュ値)、処理、コミットメッセージが表示されます。
$ git reflog
09b872e (HEAD -> master) HEAD@{0}: commit: test3
ce0887b HEAD@{1}: commit: test2
a6c62f3 HEAD@{2}: commit: test
8e57c80 HEAD@{3}: reset: moving to HEAD
コミットに対してタグをつける git tag [タグ名] [SHA-1]
git tag → タグ一覧を表示
git tag [タグ名] [SHA-1] → タグを付ける
git push [リモートリポジトリ] [タグ名] → リモートに反映
git tag -d [タグ名] → タグの削除
タグをつける際にSHA-1(コミットごとのハッシュ値)を省略すると直前のコミットに適用されます。
Gitで使用する名前とメールアドレスの設定 git config
$ git config --global user.name "gittaro"
$ git config --global user.email taro@example.com
おわりに
もしこの記事が為になった!という方はフォローやいいねボタンのクリックをしていただけたらとても嬉しいです!