目次
ステージング状態の確認 (git status)
git statusはステージング状態を確認できます。ファイルのステージング(Staging)は、Gitで変更を追跡し、次のコミットに含める準備をするプロセスです。ステージングを行うことで、変更をコミットする前にコミットに含めるファイルを選択できます。
git statusでは変更があるファイルや追跡していないファイルが表示されます。追跡中で変更が特にないファイルは表示されません。
デフォルトでは--longオプションのロング形式の表示になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
~/TestProject (master) $ git status ブランチ master コミット予定の変更点: (use "git restore --staged <file>..." to unstage) new file: file3.txt Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: file2.txt 追跡されていないファイル: (use "git add <file>..." to include in what will be committed) |
ショート形式で表示したい場合は-sオプションをつけます。
1 2 3 4 |
~/TestProject (master) $ git status -s M file2.txt A file3.txt ?? file4.txt |
ファイルの追跡とファイル修正後のステージング (git add)
git addはファイルをステージング状態にするコマンドでリポジトリへ記録したいファイルを選択するコマンドになります。
git addを使うべきファイルは
- ファイルの追跡を新しく行う場合
- ファイルの修正を行った場合
になります。
git add等を行った後はgit commitでコミットすることでリポジトリへ記録できます。
1 2 3 4 5 |
~/TestProject (master) $ git add file{2,3,4}.txt ~/TestProject (master) $ git status -s M file2.txt A file3.txt A file4.txt |
ステージングされたファイルをリポジトリへ記録 (git commit)
git commitでステージングされたファイルがリポジトリへ記録する(コミットする)ことができます。
1 2 3 4 5 |
~/TestProject (master) $ git commit -m "first commit" [master d73de1b] first commit 3 files changed, 1 insertion(+) create mode 100644 file3.txt create mode 100644 file4.txt |
追跡中であるファイルの修正等はステージングに上げなくても-aオプションを利用するとすぐにコミットすることができます。
ただし、追跡していないファイルについてはgit addで追跡できるようにしておく必要があります。
また、コミットのチェックサムであるハッシュ値を省略したものが表示されます。これはコミットを一意に指定されるために利用されます。
記事で説明するためにリポジトリを作り直したりする可能性もありますので、例ごとにこの値がもしかしたら変わっているかもしれませんがあまり気にしないでいただけると幸いです。
1 2 3 4 5 6 |
~/TestProject (master) $ git status -s M file1.txt M file2.txt ~/TestProject (master) $ git commit -am '2' [master 790c504] 2 2 files changed, 3 insertions(+) |
ステージングと作業ディレクトリの比較 (git diff)
git diffはステージングと作業ディレクトリの比較を行うことができます。
まず、事前の準備として、file1.txtとfile2.txtをコミットした状態で説明します。
追跡中のファイルは以下の通りで、変更は特にない状態です。
1 2 3 4 5 6 7 8 9 |
~/TestProject (master) $ git ls-files file1.txt file2.txt ~/TestProject (master) $ git status -s ~/TestProject (master) $ head file1.txt file2.txt ==> file1.txt <== ==> file2.txt <== aaa |
そこにfile2.txtに対して、何かの内容を書き込んだ後にgit diffで確認を行うとステージングと作業ディレクトリでのfile2.txtの差分を確認できます。
1 2 3 4 5 6 7 8 9 10 11 |
~/TestProject (master) $ echo bbb >> file2.txt ~/TestProject (master) $ echo ccc >> file2.txt ~/TestProject (master) $ git diff diff --git a/file2.txt b/file2.txt index 72943a1..1802a74 100644 --- a/file2.txt +++ b/file2.txt @@ -1 +1,3 @@ aaa +bbb +ccc |
さらに追加でfile1.txtに対しても、何かの内容を書き込んだ後にgit diffとそれぞれのファイルの差分が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
~/TestProject (master) $ echo aaa >> file1.txt ~/TestProject (master) $ git diff diff --git a/file1.txt b/file1.txt index e69de29..72943a1 100644 --- a/file1.txt +++ b/file1.txt @@ -0,0 +1 @@ +aaa diff --git a/file2.txt b/file2.txt index 72943a1..1802a74 100644 --- a/file2.txt +++ b/file2.txt @@ -1 +1,3 @@ aaa +bbb +ccc |
ファイルの差分を個別に確認したい場合はファイル名を指定することで確認できます。
1 2 3 4 5 6 7 |
~/TestProject (master) $ git diff file1.txt diff --git a/file1.txt b/file1.txt index e69de29..72943a1 100644 --- a/file1.txt +++ b/file1.txt @@ -0,0 +1 @@ +aaa |
修正内容をステージングに上げることで差分は表示されなくなります。
1 2 3 4 5 6 7 8 |
~/TestProject (master) $ git status -s M file1.txt M file2.txt ~/TestProject (master) $ git add file{1,2}.txt ~/TestProject (master) $ git diff ~/TestProject (master) $ git status -s M file1.txt M file2.txt |
ここではgit diffの説明はここまでにしますが、オプションを利用することで様々な差分の表示ができるコマンドになります。
追跡中のファイルの追跡解除と作業ディレクトリのファイル削除 (git rm)
git rmは追跡中のファイルの追跡解除ができ、さらに作業ディレクトリからそのファイルが削除されます。
ファイルの追跡の解除をした後、そのことをコミットすることでそのファイルが削除されたことをリポジトリへ記録できます。
1 2 3 4 5 6 7 8 9 10 11 |
~/TestProject (master) $ git rm file4.txt rm 'file4.txt' ~/TestProject (master) $ ls file1.txt file2.txt file3.txt ~/TestProject (master) $ git status -s D file4.txt ~/TestProject (master) $ ~/TestProject (master) $ git commit -m 'delete file4.txt' [master 6e76998] delete file4.txt 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 file4.txt |
追跡中のファイルの移動(名前の変更)と作業ディレクトリのファイル移動 (git mv)
git mvで追跡中のファイルの移動や名前の変更を行うことができ、さらに作業ディレクトリのファイルも移動や名前の変更が行われます。
ファイルの移動や名前の変更の後、コミットすることでそのファイルが移動や名前の変更が行われたことをリポジトリへ記録できます。
1 2 3 4 5 6 7 8 9 10 |
~/TestProject (master) $ git mv file3.txt renamefile.txt ~/TestProject (master) $ ls file1.txt file2.txt renamefile.txt ~/TestProject (master) $ git status -s R file3.txt -> renamefile.txt ~/TestProject (master) $ ~/TestProject (master) $ git commit -m 'rename file3.txt -> renamefile.txt' [master 5f62c08] rename file3.txt -> renamefile.txt 1 file changed, 0 insertions(+), 0 deletions(-) rename file3.txt => renamefile.txt (100%) |