Git 入門トップページ


目次

  1. ブランチ操作
    1. ブランチの一覧表示
    2. ブランチの作成
    3. ブランチの移動
    4. ブランチ上でのコミット
    5. ブランチのマージ
    6. ブランチの削除
    7. ブランチの作成と移動
    8. ブランチの強制削除
  2. GitHub との連携
    1. リポジトリのクローン
    2. fetch と pull
    3. GitHubにプッシュ

Git によるバージョン管理入門

その他のコマンド(Windows / Linux / Mac 共通)

ブランチ操作

ここでは Windows 版,Linux / Mac 版のページで紹介できなかったその他の Git コマンドをいくつか紹介します.このページのコマンドは各 OS で共通です.

目次に戻る

ブランチの一覧表示

大きなシステムを開発するときにはブランチ操作は必須になるでしょう.例えば,新たな機能を開発するときにはそのトピックブランチを作成して,そのブランチ上でプログラムを編集します.新たな機能が動作する事が確認できたら標準ブランチに戻って,変更点を標準ブランチに反映させます.

ブランチの一覧を表示するコマンドです.標準のブランチは master (または main)です.

[GakuinHana@rin06 myReport]$ git branch ⏎ # ブランチ一覧
* master
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチの作成

ブランチを作成します.例えば,new_func というブランチをします.

[GakuinHana@rin06 myReport]$ git branch new_func ⏎ # ブランチの作成
[GakuinHana@rin06 myReport]$ git branch ⏎
* master
  new_func
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチの移動

ブランチを移動するには git checkout コマンドを使います.作成した new_func ブランチに入ります.

[GakuinHana@rin06 myReport]$ git checkout new_func ⏎ # ブランチの移動
Switched to branch 'new_func'
[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func
[GakuinHana@rin06 myReport]$

なお git switch コマンドでもブランチの移動ができます.master ブランチに戻って再び new_func ブランチに入ります.

[GakuinHana@rin06 myReport]$ git switch master ⏎ # ブランチの移動
  Switched to branch 'master'
[GakuinHana@rin06 myReport]$ git branch ⏎
* master
  new_func
[GakuinHana@rin06 myReport]$ git checkout new_func ⏎ # ブランチの移動
Switched to branch 'new_func'
[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチ上でのコミット

new_func ブランチ上で chap2.txt を編集してコミットします.この操作は標準ブランチでの操作と変わりありません.

[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func
[GakuinHana@rin06 myReport]$ git diff ⏎
diff --git a/chap2.txt b/chap2.txt
index b803cb3..bc7ee9e 100644
--- a/chap2.txt
+++ b/chap2.txt
@@ -1,2 +1,3 @@
 Windows を使って Git を勉強しよう
 将来的には Python Django や Laravel のバージョン管理をやりたい
+ブランチ操作を実験します
[GakuinHana@rin06 myReport]$ git add . ⏎
[GakuinHana@rin06 myReport]$ git commit -m'edit chap2' ⏎
[new_func bb4fab4] edit chap2
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git log --oneline ⏎
bb4fab4 edit chap2
3644099 chap2
637b394 initial commit
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチのマージ

new_func ブランチでの変更を master ブランチに反映させます.このためには master ブランチに入ったあと,merge コマンドを使います.

[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func
[GakuinHana@rin06 myReport]$ git log --oneline ⏎
bb4fab4 edit chap2
3644099 chap2
637b394 initial commit
[GakuinHana@rin06 myReport]$ git checkout master ⏎ # ブランチの移動
Switched to branch 'master'
[GakuinHana@rin06 myReport]$ git log --oneline ⏎
3644099 chap2
637b394 initial commit
[GakuinHana@rin06 myReport]$ git diff new_func ⏎ # 差分の確認
diff --git a/chap2.txt b/chap2.txt
index bc7ee9e..b803cb3 100644
--- a/chap2.txt
+++ b/chap2.txt
@@ -1,3 +1,2 @@
 Windows を使って Git を勉強しよう
 将来的には Python Django や Laravel のバージョン管理をやりたい
-ブランチ操作を実験します
[GakuinHana@rin06 myReport]$ git merge new_func ⏎ # ブランチの統合
Updating 3644099..bb4fab4
Fast-forward
 chap2.txt | 1 +
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git log --oneline ⏎
bb4fab4 edit chap2
3644099 chap2
637b394 initial commit
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチの削除

トピックブランチを master ブランチに反映させるとそのトピックブランチは役割を終えたので,このブランチは削除して良いでしょう.そのときには -d オプションを指定します.

[GakuinHana@rin06 myReport]$ git branch ⏎
* master
  new_func
[GakuinHana@rin06 myReport]$ git branch -d new_func ⏎ # ブランチの削除
Deleted branch new_func (was bb4fab4).
[GakuinHana@rin06 myReport]$ git branch ⏎
* master
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチの作成と移動

上の例ではブランチを作成したあと,移動しました.しかしブランチを作成しただけでそのまま master ブランチで作業をしてしまうことがしばしばあります.ブランチの作成と移動を一つのコマンドで行うと,そのようなミスを防ぐことができるでしょう.このためには git branch -bgit switch -c をコマンドを使います.

[GakuinHana@rin06 myReport]$ git branch ⏎
* master
[GakuinHana@rin06 myReport]$ git checkout -b new_func2 ⏎ # ブランチの作成と移動
Switched to a new branch 'new_func2'
[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func2
[GakuinHana@rin06 myReport]$ git switch -c new_func3 ⏎ # ブランチの作成と移動
Switched to a new branch 'new_func3'
[GakuinHana@rin06 myReport]$ git branch ⏎
  master
  new_func2
* new_func3
[GakuinHana@rin06 myReport]$

目次に戻る

ブランチの強制削除

トピックブランチを作成して変更をコミットしたものの,master ブランチなど他のブランチに反映(マージ)することなく削除したい場合には -D オプションを指定します.

[GakuinHana@rin06 myReport]$ git branch ⏎
  master
* new_func2
[GakuinHana@rin06 myReport]$ git diff ⏎
diff --git a/chap2.txt b/chap2.txt
index bc7ee9e..3866b8a 100644
--- a/chap2.txt
+++ b/chap2.txt
@@ -1,3 +1,4 @@
 Windows を使って Git を勉強しよう
 将来的には Python Django や Laravel のバージョン管理をやりたい
 ブランチ操作を実験します
+コミットしたもののこのブランチ操作はなかったことにしたい
[GakuinHana@rin06 myReport]$ git add . ⏎
[GakuinHana@rin06 myReport]$ git commit -m'modify chap2' ⏎
[new_func2 aa158af] modify chap2
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git log --oneline ⏎
aa158af modify chap2
bb4fab4 edit chap2
3644099 chap2
637b394 initial commit
[GakuinHana@rin06 myReport]$ git checkout master ⏎
Switched to branch 'master'
[GakuinHana@rin06 myReport]$ git branch -d new_func2 ⏎ # マージしていないので削除できない
error: The branch 'new_func2' is not fully merged.
If you are sure you want to delete it, run 'git branch -D new_func2'.
[GakuinHana@rin06 myReport]$ git branch -D new_func2 ⏎ # 強制的にブランチを削除する
Deleted branch new_func2 (was aa158af).
[GakuinHana@rin06 myReport]$ git branch ⏎
* master
[GakuinHana@rin06 myReport]$

目次に戻る

GitHub との連携

リポジトリのクローン

GitHub で公開されているリポジトリのコピーを取得するには git clone コマンドを使います.例えば,サンプルデータセットのリポジトリのクローンを取得します.この URL は GitHub のリポジトリページの「Code」ボタンからコピーできます.

[GakuinHana@rin06 ~]$ cd ~/Documents/ ⏎
[GakuinHana@rin06 Documents]$ ls ⏎
myReport
[GakuinHana@rin06 Documents]$ git clone https://github.com/rinsaka/sample-data-sets.git ⏎ # クローンの作成
Cloning into 'sample-data-sets'...
remote: Enumerating objects: 279, done.
remote: Counting objects: 100% (74/74), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 279 (delta 37), reused 65 (delta 29), pack-reused 205
Receiving objects: 100% (279/279), 15.32 MiB | 15.15 MiB/s, done.
Resolving deltas: 100% (129/129), done.
[GakuinHana@rin06 Documents]$ ls ⏎
myReport  sample-data-sets
[GakuinHana@rin06 Documents]$ cd sample-data-sets/ ⏎
[GakuinHana@rin06 sample-data-sets]$ git log --oneline ⏎
4b7b7f5 readme yolo
321f9dd readme tesseract
727dd89 readme tesseract
abf9ef1 chmod
9e6bd07 yolo
486bdd4 mv
e426dd4 yolo
ed0b612 update tesseract_data.zip
4fe85a9 en_2_img.pdf
...(省略)...
[GakuinHana@rin06 sample-data-sets]$

目次に戻る

fetch と pull

クローンで取得したリポジトリについて,そのオリジナルサイトで修正がある場合には,その内容を取得 (fetch) して,反映 (pull) します.

[GakuinHana@rin06 sample-data-sets]$ git fetch ⏎ # 変更内容の取得
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/rinsaka/sample-data-sets
   4b7b7f5..ac31f5c  master     -> origin/master
[GakuinHana@rin06 sample-data-sets]$ git status ⏎
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
[GakuinHana@rin06 sample-data-sets]$ git pull ⏎ # 変更内容を反映
Updating 4b7b7f5..ac31f5c
Fast-forward
 ReadMe.md | 2 ++
 1 file changed, 2 insertions(+)
[GakuinHana@rin06 sample-data-sets]$

目次に戻る

GitHubにプッシュ

ローカルでのコミットを GitHub に反映させるためには git push を使います.ただし,git puch を実行するためには,GitHub でアカウントを作成する,自身で秘密鍵と公開鍵のペアを作成する,GitHub に公開鍵を登録するなどの準備が必要です.

(base) rinsaka@MacStudio2022 sample-data-sets % git commit -m'readme' ⏎
[master ac31f5c] readme
 1 file changed, 2 insertions(+)
(base) rinsaka@MacStudio2022 sample-data-sets % git push ⏎
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 10 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 291.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:rinsaka/sample-data-sets.git
   4b7b7f5..ac31f5c  master -> master
(base) rinsaka@MacStudio2022 sample-data-sets %

目次に戻る