Gitリポジトリへの登録
ステージング ( git add )
CVS、SVNにない概念。Gitのリポジトリには、コミット領域とは別に
インデックス
と呼ばれる領域がある。 修正ソースとコミットされるリポジトリ領域の間に存在する。 インデックスにステージングされていないファイルや変更は、コミットされない。 作成したファイルをリポジトリへ新規登録するときに行う処理。オプションを省略すると、
新規
と更新
すべてが対象になる。-u
をつけると、更新
されたファイルのみが対象。-A
をつけると、新規
、更新
、削除
されたファイルのみが対象。$ git add . $ git add -u $ git add -A
ちなみに
git add
した後、そのファイルをさらに編集すると、git status
で状況を 確認すると、以下のようになる。On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage)
modified: test.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)modified: test.txt
同一ファイルが、ステージ済みとそうでないものに分かれて表示される。 これは、
git add
した時点の内容がステージに存在し、==その後の修正分がまだステージに載ってない 状況==になる。この状態でgit commit
すると、ステージ上の修正のみがコミットされる。ローカルのリポジトリに登録する ( git commit )
git commit
コマンドで、ステージされているすべてのファイルをローカルのgitリポジトリに登録する。 CVS、SVNのコミットとほぼ同じ。git commitを実行するとviエディタ画面が表示されてコメントを入力し、 保存終了するとコミットされる。コメント未記入で終了するとコミットがキャンセルされる。-am
は、git add -u
とcommit
を同時に行う。$ git commit コメント入力画面へ遷移。入力後コミットされる $ git commit -m "message" コメント入力画面遷移を省略して、オプションでコメントを追加 $ git commit -am "message" git add -u とgit commitを同時に行う
-v
オプションをつけると、コミットメッセージを記入するエディタ内にdiffの結果も表示される> git commit -v
( 以下はエディタの内容)
Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.
On branch master
Changes to be committed:
modified: test.txt
------------------------ >8 ------------------------
Do not touch the line above.
Everything below will be removed.
diff --git a/test.txt b/test.txt
index 72943a1..bca1092 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
aaa
+bbbb
前回のコミットに関する修正 ( git commit --amend )
git commit
でリポジトリへの登録後、ちょっとしたミスやプチ修正が発生したとする。直前のコミットとして
登録し直したい場合には、commit時に–-amend
オプションを 追加して実行すると、ミスした履歴を上書きできる。またコメントだけ修正する場合も–amendオプションでコミットすれば最後のリビジョンのコメントが入れ替わる。
リビジョンアップせずに上書きする
イメージである。$ vi sample.txt 修正 $ git add sample.txt ステージに追加 $ git commit --amend -m "message1" "message1"でコミット $ git commit --amend -m "message2" コメントだけ"message2"に修正
Gitリポジトリからのチェックアウト
Gitにおけるcheckout
の役割は、
- 指定したリビジョンの内容をリポジトリから取得して、ワーキングディレクトリを書き換える
- ブランチを切り替える
の2つになる。が、ブランチの切り替えも結局は指定したリビジョンの内容でワーキングディレクトリ を書き換えることと大差がない。
git checkoutで良く使う構文としては、以下になる。
ブランチの切り替え。
-b
オプションを追加すると、ブランチの新規作成と切り替えを同時に行う。> git checkout [<branch>] > git checkout -b [<branch>]
指定したリポジトリの内容で、ワーキングディレクトリを書き換える
==path==だけを指定した場合、ステージ(インデックスツリー)
の 内容から、ワーキングディレクトリの内容を書き換える。> git checkout [<path>]
==point==と==path==を指定した場合、
コミット済みのリポジトリ
の内容から、 ステージとワーキングディレクトリの両方の内容を書き換える。> git checkout [<point>][<path>]
変更箇所の確認 ( git diff )
git diff
コマンドで確認できる。
==ステージされてない変更箇所==を確認する場合は、引数なしで実行する。 ステージ済みの内容とステージされてない内容の差分が抽出される。> git diff test.txt - (press RETURN)diff --git a/test.txt b/test.txt index d9c3d2e..660b155 100644 --- a/test.txt +++ b/test.txt @@ -1,3 +1,4 @@ hello xxx bbbb +aaa
==ステージされた変更箇所==を確認する場合は、引数に
--staged
(または--cached)を追加する。 これにより、コミット済みの内容とステージされた内容の差分が抽出される。> git diff --staged test.txt - (press RETURN)diff --git a/test.txt b/test.txt index ce01362..d9c3d2e 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,3 @@ hello +xxx +bbbb
リポジトリからファイルを削除
ファイルの削除 ( git rm )
管理されているファイルを管理対象から外してファイルも削除する場合は、
git rm
を使う。 ワーキングディレクトリ上で実行すると、実際にファイルが削除されて、==削除した== という内容がステージされる。その後コミットすることによってリポジトリからも削除される。> git rm test.txt > git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage)
deleted: test.txt
> git commit -m "delete file"
間違えてコミットしてしまった。ファイルは削除せずにGitの管理対象外としたい。
この場合、まずステージにあるファイルを削除し、
削除内容を
コミットする。 ワーキングディレクトリのファイルは、管理対象外ファイルとして残る。> git rm --cached <file> > git rm -r --cached <directory> > git commit -m "xxx"
間違えて
git rm
してしまった。ファイルを復活したい。コミットしてないのであれば、リポジトリのHEADからチェックアウトすればよい。
> git rm test.txt rm test.txt > git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage)
deleted: test.txt
> git checkout HEAD .
> git status
On branch master
nothing to commit, working directory clean
> ls
test.txt