Gitマスター育成プログラム(第3ヶ月目:リモートリポジトリを活用したチーム開発)

目的: ローカルリポジトリをリモートリポジトリ(GitHub)に接続し、チーム開発の基本的なワークフローを習得する。

9. ローカルリポジトリをリモートリポジトリに接続する

9.1 GitHubにリモートリポジトリを作成

  1. GitHubにログインし、新しいリポジトリを作成
  1. リポジトリ名を決定(例: team-project
  2. Public か Private かを選択
GitHubにリモートリポジトリを作成
  1. 「Create repository」をクリック

9.2 ローカルリポジトリをリモートに接続

既にローカルにあるリポジトリのディレクトリに移動して右クリックして「Open Git Bash here」を選択。

リモートリポジトリを追加(usernameは自分のユーザー名にすること)

git remote add origin git@github.com:username/team-project.git

リモートリポジトリの設定を確認

git remote -v

ローカルの main ブランチをリモートにプッシュ (mainブランチがある前提)。

main ブランチが存在しても、何もコミットがない場合、Git は push を許可しません。リポジトリに少なくとも1つのコミットを作成しましょう。

git push -u origin main

GitHubで main ブランチがプッシュされたことを確認

GitHubで main ブランチがプッシュされたことを確認

10. リモートリポジトリへの操作

Git 演習: Bさんのローカルリポジトリに既に my_project がある場合の対応

前提

  • ローカルリポジトリ名: my_project
  • リモートリポジトリ名: team-project
  • Aさんが team-project に変更をプッシュ
  • Bさんのローカルに既に my_project がある

Bさんがリモートの変更を取得する方法

Bさんはリモートの最新の変更を取得し、ローカルを更新する必要があります。


1. Bさん: git status で作業ツリーの状態を確認

まず、Bさんはローカルリポジトリ(my_project)の状態を確認します。

git status


  • クリーンな状態("nothing to commit")の場合 → 次のステップへ
  • 変更がある場合modifieduntracked のファイルがある)
    • 変更をコミットする(git add . && git commit -m "ローカルの変更を保存"
    • もしくは、一時的に変更を退避する(git stash

2. Bさん: git remote -v でリモートリポジトリの確認

現在のリモートリポジトリを確認します。

git remote -v

出力例:

origin  git@github.com:sayconCoJp/team-project.git (fetch)
origin  git@github.com:sayconCoJp/team-project.git (push)

  • origin が正しく設定されていればOK
  • 違うリポジトリが設定されている場合
    • 正しいリポジトリに変更する
git remote set-url origin git@github.com:sayconCoJp/team-project.git

3. Bさん: git fetch でリモートの最新情報を取得

Aさんがリモートにプッシュした変更を取得する。

git fetch origin

  • これにより、リモートの最新の変更情報がローカルにダウンロードされる。
  • ただし、まだローカルブランチには影響を与えない

4. Bさん: git branch -a でリモートブランチの確認

リモートリポジトリに新しいブランチが追加されたかを確認。

git branch -a

出力例:

* main
  remotes/origin/main
  remotes/origin/feature-a

  • remotes/origin/feature-a が見えれば、Aさんの変更がリモートに反映されていることを確認できる。

5. Bさん: git pull で最新の変更を取得

main ブランチの最新の変更をローカルに適用する。

git pull origin main

  • もしブランチが存在しない場合(例: feature-a)、以下のコマンドで取得。
git checkout -b feature-a origin/feature-a


6. Bさん: 変更を確認

Aさんの変更が反映されているか確認。

git log --oneline --graph
ls
cat file-a.txt  # Aさんの変更が反映されているか確認


7. Bさん: 変更を加えてリモートにプッシュ

Bさんmain に変更を加え、リモートにプッシュする。

echo "Bさんの追加変更" >> file-a.txt
git add file-a.txt
git commit -m "Bさんが file-a.txt を更新"
git push origin main


8. Aさん: git pull で Bさん の変更を取得

今度は Aさんgit pull を実行し、Bさんの変更を取得。

git pull origin main
cat file-a.txt  # 変更内容を確認


Bさんのローカルリポジトリがある場合の対応まとめ

操作コマンド
ローカルの変更を確認git status
リモートリポジトリのURLを確認git remote -v
最新のリモート情報を取得git fetch origin
リモートブランチを確認git branch -a
最新の変更をローカルに適用git pull origin main
新しいブランチを取得git checkout -b feature-a origin/feature-a
変更を加えてリモートにプッシュgit push origin main

ポイント

  1. git clone は不要(すでに my_project があるため)
  2. リモートリポジトリの状態を確認する
  3. git fetch を実行し、リモートの最新情報を取得する
  4. git pull でリモートの変更をローカルに適用する
  5. 必要なら新しいブランチをチェックアウトする



cat file-a.txt # 変更内容を確認

11. チーム開発のワークフロー

11.1 ブランチを活用した開発フロー

develop ブランチを作成し、リモートにプッシュ

git branch develop
git switch develop
git push -u origin develop

feature-UI というブランチを作成し、index.html を作成

git branch feature-UI
git switch feature-UI
echo "<h1>Hello, UI</h1>" > index.html
git add index.html
git commit -m "UIデザインを追加"

feature-UI をリモートにプッシュ git push origin feature-UI

git push origin feature-UI

11.2 プルリクエスト(Pull Request, PR)

GitHub上で feature-UI のプルリクエストを作成し、develop にマージ

メンバーにレビューを依頼

問題がなければマージ


12. 練習問題

問題1: ローカルリポジトリをリモートに接続

  1. git init で新しいローカルリポジトリを作成
  2. README.md を作成し、「リモートリポジトリの練習」と記述してコミット
  3. GitHubに新しいリポジトリを作成
  4. git remote add origin でリモートと接続
  5. git push origin main でリモートにプッシュ

問題2: チーム開発を想定したブランチ管理

  1. develop ブランチを作成し、リモートにプッシュ
  2. feature-auth というブランチを作成し、auth.txt を作成
  3. git pushfeature-auth をリモートに送信
  4. GitHubで feature-auth のプルリクエストを作成し、develop にマージ

問題3: 他のメンバーの変更を取得

  1. main ブランチにいる状態で、別のメンバーが feature-db をリモートにプッシュしたと仮定
  2. git fetch を実行し、リモートの変更を取得
  3. git merge origin/feature-db で変更をローカルに統合
  4. git log --oneline --graph で履歴を確認

問題4: コンフリクトを解決

  1. mainconflict.txt を作成し、適当な内容をコミットしてプッシュ
  2. feature-updateconflict.txt を異なる内容に変更し、コミット後にプッシュ
  3. feature-updatemain にマージしようとし、コンフリクトを発生させる
  4. 手動でコンフリクトを解決し、マージを完了

問題5: GitHubでフォーク & プルリクエスト

  1. 別のユーザーのGitHubリポジトリをフォーク
  2. 自分のリポジトリに git clone してローカルに取得
  3. fix-bug というブランチを作成し、コードを修正
  4. git push でリモートに送信し、GitHubでプルリクエストを作成
  5. オリジナルのリポジトリの管理者にレビューしてもらう

問題6: 過去のバージョンをGitHubから復元

  1. git log --oneline で過去のコミットを確認
  2. 2つ前のコミットのIDを使って git checkout <コミットID> で過去の状態に移動
  3. その状態で新しいブランチ rollback-test を作成し、git push でリモートに保存
  4. GitHub上で rollback-test の内容を確認

この第3ヶ月目の練習を通して、リモートリポジトリを活用したチーム開発に慣れていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。