[Git] 動作を試す 実行例29：branchでブランチ作成 (checkout -b)

Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。

1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。

※前回記事のリポジトリ状態からの続きになっています。
| [前回記事へ](https://qiita.com/dl_from_scratch/items/19e04b394ca33aa8e497) | [目次へ：Git関連記事のまとめページ](https://qiita.com/dl_from_scratch/items/597bc28a4787a7901d21) | [次回記事へ](https://qiita.com/dl_from_scratch/items/3e5b6beb57428c503303) |
|:-:|:-:|:-:|

# 実行例

※Pro Git本 引用: 次のコミットには直前のコミットへのポインタが格納されます。ブランチを作成したら単に新たな移動先を指す新しいポインタが作られるだけです。

```
(※始めにコミット履歴状況を確認)
git log --oneline
↓
結果: 
94996a0 (HEAD -> master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

-----

※ブランチを作成してcheckout
git checkout -b branch1
↓
結果: 
Switched to a new branch 'branch1'

git branch -v
↓
結果: 
* branch1 94996a0 message4
  master  94996a0 message4

git log --oneline
↓
結果: 
94996a0 (HEAD -> branch1, master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

※複数のブランチやタグが分岐してから現在までの記録を表示する
git show-branch
↓
結果: 
* [branch1] message4
 ! [master] message4
--
*+ [branch1] message4

-----

echo Sample-Added-17 >> test1.txt
git commit -a -m "message7"
↓
結果: 
[branch1 2495cae] message7
 1 file changed, 1 insertion(+)

git log --oneline
↓
結果: 
2495cae (HEAD -> branch1) message7
94996a0 (master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

git show-branch
↓
結果: 
* [branch1] message7
 ! [master] message4
--
*  [branch1] message7
*+ [master] message4

-----

git checkout master
type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14

echo Sample-Added-18 >> test1.txt
echo Sample-Added-****21 > test2.txt
echo Sample-Added-51 > test5.txt
git status -s
↓
結果: 
 M test1.txt
 M test2.txt
?? test5.txt

※ブランチを作成する前に変更していても、ブランチを作成して移すことが可能
git checkout -b branch2
↓
結果: 
Switched to a new branch 'branch2'

git commit -a -m "message8"
↓
結果: 
[branch2 c68ef01] message8
 2 files changed, 2 insertions(+), 1 deletion(-)

git log --oneline
↓
結果: 
c68ef01 (HEAD -> branch2) message8
94996a0 (master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

git show-branch
↓
結果: 
! [branch1] message7
 * [branch2] message8
  ! [master] message4
---
 *  [branch2] message8
+   [branch1] message7
+*+ [master] message4

-----

(※適当に変更の操作を追加)
echo Sample-Added-19 >> test1.txt
git commit -a -m "message9"

git show-branch
↓
結果: 
! [branch1] message7
 * [branch2] message9
  ! [master] message4
---
 *  [branch2] message9
 *  [branch2^] message8
+   [branch1] message7
+*+ [master] message4

※ブランチポインタがどのコミットを指しているのか、コミット履歴がどこで分岐したのかも表示する。
git log --oneline --graph --all
↓
結果: 
* b838160 (HEAD -> branch2) message9
* c68ef01 message8
| * 2495cae (branch1) message7
|/
* 94996a0 (master) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

※現在のブランチ構造の模式図
message1-2-3-4 ←master
             |
             +-7 ←branch1
             |
             +-8-9 ←branch2

-----

git checkout master
git log --oneline --graph --all
↓
結果: 
* b838160 (branch2) message9
* c68ef01 message8
| * 2495cae (branch1) message7
|/
* 94996a0 (HEAD -> master) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git log --oneline
↓
結果: 
94996a0 (HEAD -> master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

-----

※指定したコミットSHA値を含んでいるブランチを探す
git branch --contain 94996a0
↓
結果: 
  branch1
  branch2
* master

git branch --contain 94996a0 -v
↓
結果: 
  branch1 2495cae message7
  branch2 b838160 message9
* master  94996a0 message4

git branch --contain c68ef01 -v
↓
結果: 
  branch2 b838160 message9

※リモートリポジトリの中を探す場合
git branch --contain -r 94996a0

-----

※ブランチ名を探す
git branch --list *branch* -v
↓
結果: 
  branch1 2495cae message7
  branch2 b838160 message9

※リモートリポジトリの中を探す場合
git branch --list -r *branch*

-----

※ブランチを作成
git branch branch3

git branch -v
↓
結果: 
  branch1 2495cae message7
  branch2 b838160 message9
  branch3 94996a0 message4
* master  94996a0 message4

※ブランチを削除
git branch -D branch3
↓
結果: 
Deleted branch branch3 (was 94996a0).

git branch -v
↓
結果: 
  branch1 2495cae message7
  branch2 b838160 message9
* master  94996a0 message4

-----

※masterを強制的に戻して更に変更をコミットしてしまう場合
git checkout master
type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14

git reset --hard 20bbab7
↓
結果: 
HEAD is now at 20bbab7 message3

type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13

echo Sample-Added-14(reset) >> test1.txt
git commit -a -m "message4(reset)"
↓
結果: 
[master b1df50b] message4(reset)
 1 file changed, 1 insertion(+)

git log --oneline
↓
結果: 
b1df50b (HEAD -> master) message4(reset)
20bbab7 message3
00cad71 message2
4ace194 message1

git show-branch
↓
結果: 
! [branch1] message7
 ! [branch2] message9
  * [master] message4(reset)
---
  * [master] message4(reset)
 +  [branch2] message9
 +  [branch2^] message8
+   [branch1] message7
++  [branch2~2] message4
++* [master^] message3

git log --oneline --graph --all
↓
結果: 
* b1df50b (HEAD -> master) message4(reset)
| * b838160 (branch2) message9
| * c68ef01 message8
| | * 2495cae (branch1) message7
| |/
| * 94996a0 message4
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

※現在のブランチ構造の模式図
           +-4(reset) ←master
           |
message1-2-3-4
             |
             +-7 ←branch1
             |
             +-8-9 ←branch2

-----

(※始めに作成したブランチの状態に戻す)
git reset --hard 94996a0
git log --oneline --graph --all
↓
結果: 
* b838160 (branch2) message9
* c68ef01 message8
| * 2495cae (branch1) message7
|/
* 94996a0 (HEAD -> master) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
```

# 環境

Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。