LoginSignup
22
22

More than 5 years have passed since last update.

GIt基本操作チュートリアル

Posted at

「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

コンフリクトが解消されてコミットされる。

22
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22