神戸学院大学 経営学部 林坂ゼミ

Git 入門トップページ

« 戻る 次へ »

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

GitHub との連携

GitHub は作成したソースコードなどをクラウド上で管理・公開することのできる Web サービスです.Git で管理しているファイル群をリポジトリ (Repository) という単位で管理できます.GitHub では public リポジトリと private リポジトリの2つのタイプのリポジトリを作成することができ,public リポジトリは全世界にファイルがされます.

特に public リポジトリの中にパスワードなどの情報が含まれるファイルをアップしてしまうと重大なインシデントに繋がるので,利用時には十分に注意してください.もちろん private リポジトリであってもパスワードなどの情報はアップすべきではありません.

目次に戻る

GitHubアカウントの作成

GitHub を利用するにはアカウントを作成する必要があります.GitHub のトップページから「Sign up」のページに移動し,アカウントを作成してください.通常は Git で登録したメールアドレスと同じメールアドレスで登録すると良いでしょう.

目次に戻る

リポジトリの作成

GitHub で新規のリポジトリを作成します.リポジトリを作成するには GitHub にログインした状態で「Repositories」のリンクを開き,「New」ボタンを押します.あるいは https://github.com/new にアクセスします.

次のような画面が表示されるので,リポジトリの名前を入力します.ここでは手元の PC で開発中のプロジェクト名(つまりフォルダ名)と同じ名前を設定すると良いでしょう.また,その下では「Public」が選択されているはずなのでこれを「Private」に変更します.

2024-win-30

画面を下方向にスクロールすると「Create repository」というボタンが現れるのでこのボタンを押すと GitHub 上で新規のリポジトリが作成されます.

2024-win-31

目次に戻る

リモートリポジトリの追加

GitHub でリポジトリを作成したので,手元の PC で管理しているプロジェクトにリモートリポジトリを追加することで GitHub のリポジトリと連携させます.

GitHub でリポジトリを作成すると次のような画面が表示されているはずです.この画面では「HTTPS」が選択されていることを確認します.

2024-win-33

画面を下方向にスクロールすると,連携のためのコマンドが表示されます.赤枠で囲った3行のコマンドのうち,1行目をコピー&ペーストして実行すればリモートリポジトリを登録できます.なお,2行目の git branch -M main はブランチの名前を強制的に main に変更するコマンドですので,すでに main ブランチを使っている状況では必要ありません.

2024-win-34

実際に次の通りコマンドを実行します.(このページのコマンドをコピーせずに,自身の GitHub のページに記載されたコマンドを利用してください.)

C:\Users\student\Documents\myReport>git remote add origin https://github.com/rinsaka/myReport.git ⏎

C:\Users\student\Documents\myReport>

正しく登録できたかどうかは次のコマンドで確認できます.origin という名前でリモート追跡ブランチが作成されていることがわかります.ここで fetch はリモート (GitHub) からローカルにコード取り込む,push はローカルからリモートにコードを送信することを意味しています.

C:\Users\student\Documents\myReport>git remote -v ⏎
origin  https://github.com/rinsaka/myReport.git (fetch)
origin  https://github.com/rinsaka/myReport.git (push)

C:\Users\student\Documents\myReport>

ブランチの一覧で --all オプションや -a オプションを追加すると上で作成したリモート追跡ブランチを見ることができます.

C:\Users\student\Documents\myReport>git branch ⏎
* main

C:\Users\student\Documents\myReport>git branch --all ⏎
* main
  remotes/origin/main

C:\Users\student\Documents\myReport>git branch -a ⏎
* main
  remotes/origin/main

C:\Users\student\Documents\myReport>

目次に戻る

リモートリポジトリへのプッシュ(1)

git push コマンドを利用すると,ローカルで管理している内容をリモートリポジトリに反映させることができます.リポジトリに対して最初にプッシュするときにはこの画面の3行目に表示されているように it push -u origin main コマンドを実行します.(このとき,Macでは「ターミナル」アプリではなく,Visual Studio Code 内の「ターミナル」から実行するようにしてください.)

C:\Users\student\Documents\myReport>git push -u origin main ⏎

そのデバイス (PC) で初めて上のコマンドを実行したときには,次のような画面(ログインしていなければログイン画面)が表示されます.Web ブラウザでサインインするとデバイスが登録されて GitHub へプッシュできるようになります.次の画面では「Sign in with your browser」ボタンをクリックします.

2024-win-35

ブラウザが起動して次の画面が表示されます.表示された内容を確認して「Authorize git-ecosystem」をクリックします.

2024-win-36

ブラウザでの認証に成功すると次のような画面が表示されて登録完了です.

2024-win-38

上の画面まで進むと,ターミナルでプッシュのコマンドが完了しているはずです.

C:\Users\student\Documents\myReport>git push -u origin main ⏎ # すでに入力済みのコマンド
info: please complete authentication in your browser...
Enumerating objects: 20, done.
Counting objects: 100% (20/20), done.
Delta compression using up to 3 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (20/20), 1.96 KiB | 167.00 KiB/s, done.
Total 20 (delta 6), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (6/6), done.
To https://github.com/rinsaka/myReport.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

C:\Users\student\Documents\myReport>

GitHub のリポジトリページを再読み込みするとコードの一覧が表示され,「chapter1.txt」と「chapter2.txt」の2つのファイルが登録されていることが確認できます.また,7つのコミット履歴があることもわかります.

2024-win-39

なお,初めてリモートリポジトリにプッシュするときには -u origin main というオプションを付与しましたが,2回目以降は git push だけで可能です.詳細は後ほど説明します

C:\Users\student\Documents\myReport>git push ⏎

また,Macに標準搭載された「ターミナル」アプリでは,git push -u origin main を実行したときに,ターミナルの中でユーザ名を入力するプロンプトが表示されるかもしれません.このような場合は,「Visual Studio Code」の中でターミナルを開き,同じコマンドを実行してください.実行後に次のような画面が表示されたら「許可」を押して次へ進みます.

2024-mac-05

内容を確認して「Authorize Visual-Studio-Code」ボタンを押します.

2024-mac-06

「許可」をクリックします.

2024-mac-07

次の画面が表示されたら認証が完了してリモートリポジトリへプッシュされます.

2024-mac-08

同時にターミナルにもその実行結果が表示されます.

2024-mac-09

目次に戻る

GitHub上での編集とコミット

GitHub上でリポジトリに登録されているファイルをブラウザで編集しコミットすることも可能です.上の画面で「chapter1.txt」というファイル名をクリックすると次の画面に移動します.さらに右上にある「Edit this files」という「鉛筆」のアイコンをクリックして編集モードに移行します.

2024-win-40

編集画面に移動しました.

2024-win-41

ファイルを適当に編集します.例えば最後の行に追記します.編集が終われば右上にある「Commit changes...」ボタンをクリックします.

2024-win-42

コミットメッセージが自動的に生成されています.必要に応じてこのメッセージを編集して(今回は編集せずにそのまま)「Commit changes」という右下のボタンを押してコミットします.

2024-win-43

コミットできると次の画面に移動します.左上にある「< > Code」リンクをクリックします.

2024-win-44

コード一覧のページに移動しました.chapter1.txt のファイルが直前 (now) にコミットされたこと,コミット履歴の数が8に変化したことが確認できました.「8 Commits」と表示された部分をクリックします.

2024-win-45

コミット履歴が一覧で表示され,さきほどGitHub 上で行ったコミットも確認できました.更にリンクを辿るとコミットの内容を詳細に確認することも可能です.

2024-win-46

目次に戻る

GitHubからローカルリポジトリに取り込む

GitHub上でコミットを行ったので,ローカルリポジトリよりも GitHub 上のリモートリポジトリの方が進んだ状態になりました.ここでは,リモートリポジトリの内容をローカルリポジトリに取り込む方法を説明しますが, ポイントは fetchmerge を続けて実行するということです.

手元 PC のターミナルでブランチの一覧を確認します.これまで利用してきた git branch コマンドではローカルリポジトリのブランチだけが表示されます.このコマンドに --all オプションを追加すると,リモート追跡ブランチという特殊なブランチの存在も確認できます.remotes/origin/main という名称のリモート追跡ブランチは,リモートリポジトリの状態を保持するための特殊なブランチです.

C:\Users\student\Documents\myReport>git branch ⏎
* main

C:\Users\student\Documents\myReport>git branch --all ⏎
* main
  remotes/origin/main

C:\Users\student\Documents\myReport>

手元 PC のターミナルでローカルリポジトリのコミットログを確認すると main ブランチには7件のコミットログがあることがわかります.これと同時に,リモート追跡ブランチ origin/mainremotes/ は省略可能)が main ブランチと同じ状態であることもわかります.

C:\Users\student\Documents\myReport>git log --oneline ⏎
72f5e41 (HEAD -> main, origin/main) Merge branch 'new_func2'
2035fb1 edit chapter2
5074a02 edit chapter1
bea88fe update chapter2
c779f65 chapter1修正とchapter2追加
804abdc 1行追加
ce2533a initial commit

C:\Users\student\Documents\myReport>

リモート追跡ブランチのコミットログを参照してみます.上の手順では GitHub 上で新たなコミットを追加しましたが,その変更をまだ取り込んでいません.したがって,ここの手順でプッシュした時点の状態になっているはずです.

C:\Users\student\Documents\myReport>git log origin/main --oneline ⏎
72f5e41 (HEAD -> main, origin/main) Merge branch 'new_func2'
2035fb1 edit chapter2
5074a02 edit chapter1
bea88fe update chapter2
c779f65 chapter1修正とchapter2追加
804abdc 1行追加
ce2533a initial commit

C:\Users\student\Documents\myReport>

それでは GitHub のリモートリポジトリにある最新の内容をローカルリポジトリに取り込みます.取り込みには git fetch コマンドを使用します.これにより,リモートリポジトリの内容がリモート追跡ブランチ origin/main に取り込まれます.

C:\Users\student\Documents\myReport>git fetch ⏎
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 983 bytes | 163.00 KiB/s, done.
From https://github.com/rinsaka/myReport
   72f5e41..d5840e6  main       -> origin/main

C:\Users\student\Documents\myReport>

リモートリポジトリからの取り込みができていることを確認します.これはリモート追跡ブランチのコミットログを確認するとわかります.その結果,標準ブランチ main よりもリモート追跡ブランチ origin/main が1コミットだけ先に進んでいることを確認できます.

C:\Users\student\Documents\myReport>git log origin/main --oneline ⏎
d5840e6 (origin/main) Update chapter1.txt
72f5e41 (HEAD -> main) Merge branch 'new_func2'
2035fb1 edit chapter2
5074a02 edit chapter1
bea88fe update chapter2
c779f65 chapter1修正とchapter2追加
804abdc 1行追加
ce2533a initial commit

C:\Users\student\Documents\myReport>

メインブランチの状態を確認すると,リモート追跡ブランチよりも1コミット分遅れていることがわかります.

C:\Users\student\Documents\myReport>git status ⏎
  On branch main
  Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
    (use "git pull" to update your local branch)

  nothing to commit, working tree clean

  C:\Users\student\Documents\myReport>

リモート追跡ブランチの内容を main ブランチにマージします.このとき,--no-ff オプションは不要です.

C:\Users\student\Documents\myReport>git merge origin/main ⏎
Updating 72f5e41..d5840e6
Fast-forward
 chapter1.txt | 1 +
 1 file changed, 1 insertion(+)

C:\Users\student\Documents\myReport>

コミットログを表示するとリモートリポジトリと同じ状態になったことを確認できました.

C:\Users\student\Documents\myReport>git log --oneline ⏎
d5840e6 (HEAD -> main, origin/main) Update chapter1.txt
72f5e41 Merge branch 'new_func2'
2035fb1 edit chapter2
5074a02 edit chapter1
bea88fe update chapter2
c779f65 chapter1修正とchapter2追加
804abdc 1行追加
ce2533a initial commit

C:\Users\student\Documents\myReport>

現在の状態を確認します.

C:\Users\student\Documents\myReport>git status ⏎
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

C:\Users\student\Documents\myReport>

つまり,リモートリポジトリから取り込むには fetchmerge を続けて実行します.

C:\Users\student\Documents\myReport>git fetch ⏎

C:\Users\student\Documents\myReport>git merge origin/main ⏎

なお,git fetchgit merge のコマンドをまとめて実行するためのコマンドが git pull です.

C:\Users\student\Documents\myReport>git pull ⏎

また,git fetch の後,git merge の代わりに git pull を実行しても問題ありません.実際 git fetch をした後に git status を実行したときには,ヒントとして git pull コマンドが表示されていました

C:\Users\student\Documents\myReport>git fetch ⏎

C:\Users\student\Documents\myReport>git pull ⏎

目次に戻る

リモートリポジトリへのプッシュ(2)

次はローカルリポジトリでファイルを編集してコミットした後,リモートリポジトリへプッシュする方法を説明します.これによりローカルリポジトリで行った変更をリモートリポジトリへ反映させることができます.

まず,ローカルリポジトリでファイルを編集します.例えば chapter1.txt の最後に適当な内容で1行追加してみます.

chapter1.txt
Gitのお勉強
神戸学院大学経営学部
Python
React
ブランチをマージしたという記録も残したい
GitHubで編集します
Visual Studio Codeで編集します

「VSCodeで編集」というコミットメッセージを付けてファイルの変更をコミットします.

C:\Users\student\Documents\myReport>git status ⏎
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   chapter1.txt

no changes added to commit (use "git add" and/or "git commit -a")

C:\Users\student\Documents\myReport>git add . ⏎

C:\Users\student\Documents\myReport>git commit -m"VSCodeで編集" ⏎
[main 6ec7640] VSCodeで編集
 1 file changed, 1 insertion(+)

C:\Users\student\Documents\myReport>

コミットログと現在の状態を確認します.いずれのコマンドでも現在の main ブランチがリモートリポジトリ(厳密にはリモート追跡ブランチ)よりも1コミット分だけ先にいることがわかります.

C:\Users\student\Documents\myReport>git log --oneline ⏎
6ec7640 (HEAD -> main) VSCodeで編集
d5840e6 (origin/main) Update chapter1.txt
72f5e41 Merge branch 'new_func2'
2035fb1 edit chapter2
5074a02 edit chapter1
bea88fe update chapter2
c779f65 chapter1修正とchapter2追加
804abdc 1行追加
ce2533a initial commit

C:\Users\student\Documents\myReport>git status ⏎
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

C:\Users\student\Documents\myReport>

リモートリポジトリの内容を GitHub で表示すると,ローカルリポジトリよりも1コミット分だけ遅れていることがわかります.

2024-win-47

git push コマンドを使ってローカルリポジトリの内容をリモートリポジトリへ反映させます.なお,初めてプッシュするときには git push -u origin main というコマンドを利用しましたが,2回目以降は git push だけで構いません.

C:\Users\student\Documents\myReport>git push ⏎
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 3 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 373 bytes | 373.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/rinsaka/myReport.git
   d5840e6..6ec7640  main -> main

C:\Users\student\Documents\myReport>

リモートリポジトリを再読込すると内容が反映されたことが確認できました.

2024-win-48

目次に戻る