「GitHub実践入門」の書籍から第4章のgitの使い方のチュートリアルを実施とメモ。
内容詳細はとても丁寧に書籍には記載されているので、Gitの通常の利用(GitHubを使わない)でもとてもお勧めな書籍。
基本的な操作
git初期化
$ git init
Initialized empty Git repository in /home/vagrant/test/.git/
リポジトリの状態確認
ステータスの確認
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
ファイルを作ってステータスの確認
$ touch README.md
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README.md
nothing added to commit but untracked files present (use "git add" to track)
追加・編集
ステージ領域へのファイルを追加(git add)
$ git add README.md
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
リポジトリの歴史を記録
$ git commit -m "First commit"
[master (root-commit) f83324e] First commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
$ git status
# On branch master
nothing to commit (working directory clean)
コミットログを確認
$ git log
commit f83324e2d5c95a3ef022a887a5d740f6153eccba
Author: vagrant <vagrant@hogehoge.(none)>
Date: Wed Jan 21 12:22:05 2015 +0000
First commit
変更差分を確認
README.mdに変更をかけての状態の確認。
$ vi README.md
以下の行を追加
----------------
# GITチュートリアル
----------------
状態の確認
$ git diff
diff --git a/README.md b/README.md
index e69de29..002e313 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# GITチュートリアル
$ git add README.md
ワークツリーと最新のコミットの差分を確認する
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..002e313 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# GITチュートリアル
git commit -m "Add Index"
[master d7bacc6] Add Index
1 files changed, 1 insertions(+), 0 deletions(-)
ログの確認
$ git log
commit d7bacc6d3b08bfc1207910066909bb1d64ec5a23
Author: vagrant <vagrant@hogehoge.(none)>
Date: Wed Jan 21 12:26:15 2015 +0000
Add Index
commit f83324e2d5c95a3ef022a887a5d740f6153eccba
Author: vagrant <vagrant@hogehoge.(none)>
Date: Wed Jan 21 12:22:05 2015 +0000
First commit
ブランチの操作
ブランチ一覧を表示
$ git branch
* master
ブランチを作成し切り替える
feature-Aブランチに切り替えてコミットする
$ git checkout -b feature-A
Switched to a new branch 'feature-A'
これは以下の操作と同じ。
$ git branch feature-A
$ git checkout feature-A
ブランチの確認
$ git branch
* feature-A
master
ファイルを更新する。
$ vi README.md
以下の行を追加
----------------
- feature-A
----------------
ファイルの追加
$ git add README.md
feature-Aのブランチでのコミット
$ git commit -m "Add feature-A"
[feature-A ae9f50e] Add feature-A
commit --amend --author='Your Name <you@example.com>'
1 files changed, 2 insertions(+), 0 deletions(-)
masterブランチへ切り替える
$ git checkout master
Switched to branch 'master'
ブランチをmasterに戻したところでファイル内容を確認してみる。
$ cat README.md
# GITチュートリアル
feature-Aで変更した内容が戻っている。
一つ前のブランチに切り替える(feature-A)
$ git checkout -
Switched to branch 'feature-A'
ブランチをマージ
マスタにブランチを戻す。
$ git checkout master
Switched to branch 'master'
マージコマンドの実行
$ git merge --no-ff feature-A
Merge made by recursive.
README.md | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
ブランチを視覚的に確認する
$ git log --graph
* commit 1eaad66acbb5809b1a916b30f99d680c6acaa923
|\ Merge: d7bacc6 ae9f50e
| | Author: hogehoge <hogehoge@test.com>
| | Date: Wed Jan 21 12:36:09 2015 +0000
| |
| | Merge branch 'feature-A'
| |
| * commit ae9f50e127e271f798bc552aa1cd92098a650cae
|/ Author: vagrant <vagrant@hogehoge.(none)>
| Date: Wed Jan 21 12:32:09 2015 +0000
|
| Add feature-A
|
* commit d7bacc6d3b08bfc1207910066909bb1d64ec5a23
| Author: vagrant <vagrant@hogehoge.(none)>
| Date: Wed Jan 21 12:26:15 2015 +0000
|
| Add Index
|
* commit f83324e2d5c95a3ef022a887a5d740f6153eccba
Author: vagrant <vagrant@hogehoge.(none)>
Date: Wed Jan 21 12:22:05 2015 +0000
First commit
コンフリクトの解消
歴史を戻る
feature-Aブランチを分岐する前に戻る
$ git reset --hard d7bacc6d3b08bfc1207910066909bb1d64ec5a23
HEAD is now at d7bacc6 Add Index
fix-Bブランチを作成する
$ git checkout -b fix-B
Switched to a new branch 'fix-B'
過去のmasterの状態から別ブランチを作成した状態でファイルの編集。
(feature-Aで編集したものと同じファイル。)
$ vi README.md
以下の行を追加
----------------
- fix-B
----------------
ファイルをコミット。
$ git add README.md
$ git commit -m "Fix B"
[fix-B cdea270] Fix B
1 files changed, 2 insertions(+), 0 deletions(-)
feature-Aブランチをマージした後の状態に進む
まずは状態の確認。
$ git reflog
cdea270 HEAD@{0}: commit: Fix B
d7bacc6 HEAD@{1}: checkout: moving from master to fix-B
d7bacc6 HEAD@{2}: d7bacc6d3b08bfc1207910066909bb1d64ec5a23: updating HEAD
1eaad66 HEAD@{3}: merge feature-A: Merge made by recursive.
d7bacc6 HEAD@{4}: checkout: moving from feature-A to master
ae9f50e HEAD@{5}: checkout: moving from master to feature-A
d7bacc6 HEAD@{6}: checkout: moving from feature-A to master
ae9f50e HEAD@{7}: commit: Add feature-A
d7bacc6 HEAD@{8}: checkout: moving from master to feature-A
d7bacc6 HEAD@{9}: commit: Add Index
f83324e HEAD@{10}: commit (initial): First commit
上から4番目のがfeature-Aブランチをマージした後の状態。
$ git checkout master
Switched to branch 'master'
git reset --hard 1eaad66
HEAD is now at 1eaad66 Merge branch 'feature-A'
コンフリクトを解消
マージしてみる。
$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
「README.md」ファイルで、「Merge conflict」が出ていると表示される。
この状態で「README.md」を確認。
$ cat README.md
# GITチュートリアル
<<<<<<< HEAD
- feature-A
=======
- fix-B
>>>>>>> fix-B
このファイルを以下のように編集
$ vi README.md
以下に編集
----------------
# GITチュートリアル
- feature-A
- fix-B
----------------
解消した結果をコミットする
$ git add README.md
$ git commit -m "Fix conflict"
[master 334d70b] Fix conflict
コンフリクトが解消されてコミットされる。