概念
3つのエリアから構成されている
ワーキングディレクトリ
監視されているファイルの初期位置
ステージングエリア
addされたファイルが移動するエリア
コミットの対象になる
リポジトリ
コミットされたファイルが格納される場所
Gitツアー
では早速、作業をするフォルダを作成しましょう
$ mkdir git-tour
$ cd git-tour/
git status
リポジトリの状態を確認するコマンド。おなじみですね。
$ git status
fatal: Not a git repository (or any of the parent directories): .git
現在はまだ何もしていないので、Gitリポジトリがないと言われます。
git init
リポジトリを作成するコマンド
あながち間違いじゃないが、今までgitの初期化のコマンドとしか認識していなかったが
ローカルにリポジトリを作成するコマンドらしい。
リポジトリ作る
$ git init
Initialized empty Git repository in /Users/xxxxxx/xxxxxx/git-tour/.git/
git init
を実行すると.git
が作成され、ここにリポジトリに関する情報が管理される。
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
つまり.git
を削除すればリポジトリは削除される
$ rm -rf .git/
$ git status
fatal: Not a git repository (or any of the parent directories): .git
元に戻しましょう
$ git init
適当なファイルを作ってみましょう
$ echo 'Hello World' > text.md
$ ls
text.md
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
text.md
nothing added to commit but untracked files present (use "git add" to track)
ディレクトリ内で何かファイルの作成なり編集なり削除されるとまずワーキングディレクトリ
と言うエリアに属することになるUntracked files:
となっているのが目印だ。
ワーキングディレクトリのファイルを削除するにはgit clean
を使用します。
git clean
を使用するとワーキングディレクトリ内のファイルを一掃することができます。
#削除の対象のファイルを確認
$ git clean -n
Would remove text.md
#実行
$ git clean -f
Removing text.md
これをコミットの対象となるステージングに移動するにはgit add
を使用する。
git add
ステージングにファイルを追加するコマンド
#ファイルをステージングに追加
git add <ファイル名>
#複数ファイルを追加
git add <ファイル名> <ファイル名> <ファイル名> <ファイル名>
#すべてのファイルを追加
git add .
text.md
をステージングエリアに追加する
$ echo 'Hello World' > text.md
$ git add text.md
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: text.md
Changes to be committed:
がステージングエリアにいるファイルの目印です。
ステージングエリアのファイルをワーキングディレクトリに戻す
git reset
git reset
でステージングエリアのファイルをワーキングディレクトリに戻すことができる。
$ git reset text.md
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
text.md
nothing added to commit but untracked files present (use "git add" to track)
ステージングエリアに追加した後同ファイルを更新していた場合
$ git add text.md
$ echo 'Hello Git' > text.md
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: text.md
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: text.md
$ cat text.md
Hello Git
この状態でgit reset
した場合
$ git reset text.md
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
text.md
nothing added to commit but untracked files present (use "git add" to track)
$ cat text.md
Hello Git
text.md
は最新の状態のまま
ステージングエリアのファイルの状態をワーキングディレクトリに上書きする場合はgit checkout
を使用する
$ echo 'Hello Staging Erea' > text.md
$ git add text.md
$ echo 'Hello Working Directory' > text.md
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: text.md // Hello Staging Erea
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: text.md // Hello Working Directory
$ cat text.md
Hello Working Directory
$ git checkout text.md
$ cat text.md
Hello Staging Erea
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: text.md
リポジトリにコミット
git commit
リポジトリにコミットするにはgit commit
を使用、ステージングエリアにいるファイルをコミットします。
$ git commit -m "text.mdを作成"
[master (root-commit) 966a537] text.mdを作成
1 file changed, 1 insertion(+)
create mode 100644 text.md
text.md
を少し編集してみましょう。
$ echo 'Hello New World' > text.md
$ cat text.md
Hello New World
git diff
現在の編集とリポジトリの差分を見るにはgit diff
を使用します。
$ git diff
diff --git a/text.md b/text.md
index 5b33845..d9786ef 100644
--- a/text.md
+++ b/text.md
@@ -1 +1 @@
-Hello Staging Erea
+Hello New World
ステージングエリアへの追加とコミットを一つのコマンドで実行できる方法もあります。
この場合ワーキングディレクトリ内のファイル全てが対象になります。
$ git commit -a -m "text.mdを編集"
[master 83f0b1a] text.mdを編集
1 file changed, 1 insertion(+), 1 deletion(-)
git log
git log
ではコミットのログを確認できます。
$ git log
commit 83f0b1ac966094d4c2afafa22ffff04f2b204306
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:20:14 2017 +0900
text.mdを編集
commit 966a53756321340db3e4f27b6cd8a5e44a5f26bf
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:14:34 2017 +0900
text.mdを作成
直前のコミット編集することもできます。
Hello New World
で編集したが、!が抜けていた。
だけど追加でコミットしたくない時に便利なのがgit commit --amend
$ echo 'Hello New World!' > text.md
$ git add text.md
$ git commit --amend
[master 3e33a46] text.mdを編集
Date: Thu Dec 28 06:20:14 2017 +0900
1 file changed, 1 insertion(+), 1 deletion(-)
またgit commit --amend
を実行するとvimが起動するので、編集の内容修正のみの場合はそのまま閉じる、
コミットメッセージを修正したい場合はvimで修正が可能。
$ git log
commit 3e33a4602ad09b97811a45bc5d8ea04537e8f107
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:20:14 2017 +0900
text.mdを編集
commit 966a53756321340db3e4f27b6cd8a5e44a5f26bf
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:14:34 2017 +0900
text.mdを作成
ログが変わってないのがわかる。
git revert
コミットを打ち消すコミットを作成することができる
commit 3e33a4602ad09b97811a45bc5d8ea04537e8f107
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:20:14 2017 +0900
text.mdを編集
このコミットをリバートする場合
$ git revert 3e33a4602ad09b97811a45bc5d8ea04537e8f107
$ cat text.md
Hello Staging Erea
$ git log
commit 531eda295dbc2ad586c09d2882fc6fc202009cf7
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:32:36 2017 +0900
Revert "text.mdを編集"
This reverts commit 3e33a4602ad09b97811a45bc5d8ea04537e8f107.
commit 3e33a4602ad09b97811a45bc5d8ea04537e8f107
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:20:14 2017 +0900
text.mdを編集
commit 966a53756321340db3e4f27b6cd8a5e44a5f26bf
Author: stivan622 <stivan.tr@gmail.com>
Date: Thu Dec 28 06:14:34 2017 +0900
text.mdを作成
次回はリモートリポジトリが絡んだ場合の操作を復習します〜