Git及びGitHubの練習問題
この記事について
この記事は、GitおよびGitHubの基本的な操作に慣れるための練習問題と、その手順をまとめたガイドである。
gh コマンド(GitHub CLI)を中心に、実際の開発フローをコマンドラインで体験することを目的とする。
リポジトリの作成、ブランチの操作、変更のコミットとプッシュ、そしてプルリクエストの管理といった内容を学習する。
コマンドの実行例に続いて、最後に理解度を確認するための練習問題がある。
レポジトリを作成する
gh repo createコマンドは、GitHub上に新しいリポジトリを作成する。
gh repo create re-gh --public --add-readme -cというコマンドは、re-ghという名前で公開(--public)リポジトリを作成し、--add-readmeフラグによってREADME.mdファイルを自動生成する。さらに-c(--clone)フラグで、作成したリポジトリをローカルにクローンする。
(base) mekann@MekannMacBook mekann/github $ gh repo create re-gh --public --add-readme -c
✓ Created repository Mekann2904/re-gh on github.com
https://github.com/Mekann2904/re-gh
Cloning into 're-gh'...
(base) mekann@MekannMacBook mekann/github $ ls
cable-generator my-llm-prompts
ChatGPT-Command-Suggester my-portfolio
conflict pandoc-ruby-filter
demo_git_web PoC
enpit PoC-real-estate
learning PoC-XR
mac re-gh
mcp terraform-github-management
my-github-terraform vive-terraform-repo
(base) mekann@MekannMacBook github/re-gh $ gh repo view --web
gh repo view --webコマンドは、現在いるローカルリポジトリに対応するGitHubリポジトリをブラウザで開く。
また、既存のローカルディレクトリをGitHubリポジトリとして公開することもできる。
まずmkdirとcdでディレクトリを作成して移動し、git initでGitリポジトリとして初期化する。最後にgh repo create re-gh --public --source .コマンドを実行すると、現在のディレクトリをソースとしてGitHubリポジトリが作成され、リモートURLも自動で設定される。
(base) mekann@MekannMacBook mekann/github $ mkdir re-gh
(base) mekann@MekannMacBook mekann/github $ cd re-gh
(base) mekann@MekannMacBook github/re-gh $ git init
Initialized empty Git repository in /Users/mekann/github/re-gh/.git/
(base) mekann@MekannMacBook github/re-gh $ gh repo create re-gh --public --source .
✓ Created repository Mekann2904/re-gh on github.com
https://github.com/Mekann2904/re-gh
✓ Added remote git@github.com:Mekann2904/re-gh.git
A new release of gh is available: 2.76.1 → 2.78.0
To upgrade, run: brew upgrade gh
https://github.com/cli/cli/releases/tag/v2.78.0
(base) mekann@MekannMacBook github/re-gh $ gh repo view --web
ブランチを作成し、作業ブランチに切り替える
gswc dev/mekannは git switch -c のエイリアス(別名)の可能性があり、これは dev/mekann という名前の新しいブランチを作成し、そのブランチにすぐに切り替えるコマンドである。
gbは git branch のエイリアスの可能性があり、ローカルに存在するブランチの一覧を表示するコマンドである。
(base) mekann@MekannMacBook github/re-gh $ gswc dev/mekann
Switched to a new branch 'dev/mekann'
(base) mekann@MekannMacBook github/re-gh $ gb
ブランチに変更を加え、プッシュする
echoコマンドでhoge.txtというファイルを作成してhogeという文字列を書き込み、gaa(git add -Aのエイリアスと思われる)ですべての変更をステージングする。次にgcmsg(git commit -mのエイリアスと思われる)でコミットメッセージを付けて変更を記録する。gp(git pushのエイリアスと思われる)でプッシュを試みるが、初回はアップストリームブランチがないため失敗する。そのため、git push --set-upstream origin dev/mekannを実行し、リモートにブランチをプッシュすると同時にアップストリームを設定する。これにより、次回以降はgpだけでプッシュが可能になる。
(base) mekann@MekannMacBook github/re-gh $ echo "hoge" >> hoge.txt
(base) mekann@MekannMacBook github/re-gh $ gaa
(base) mekann@MekannMacBook github/re-gh $ gcmsg "add hoge.txt"
[dev/mekann b988dc6] add hoge.txt
1 file changed, 1 insertion(+)
create mode 100644 hoge.txt
(base) mekann@MekannMacBook github/re-gh $ gp
fatal: The current branch dev/mekann has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev/mekann
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.
(base) mekann@MekannMacBook github/re-gh $ git push --set-upstream origin dev/mekann
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'dev/mekann' on GitHub by visiting:
remote: https://github.com/Mekann2904/re-gh/pull/new/dev/mekann
remote:
To github.com:Mekann2904/re-gh.git
* [new branch] dev/mekann -> dev/mekann
branch 'dev/mekann' set up to track 'origin/dev/mekann'.
プルリクエストを作成する
gh pr createコマンドは、現在のブランチからプルリクエストを作成するための対話的なプロンプトを開始する。タイトルや本文などを質問され、最後にSubmitするとGitHub上にプルリクエストが作成される。
(base) mekann@MekannMacBook github/re-gh $ gh pr create
Creating pull request for dev/mekann into main in Mekann2904/re-gh
? Title (required) hoge
? Body <Received>
? What's next? Submit
https://github.com/Mekann2904/re-gh/pull/1
プルリクエストを確認する
gh pr listコマンドでオープンなプルリクエストの一覧を表示し、gh pr view [PR番号]で指定したプルリクエストの詳細を確認できる。
(base) mekann@MekannMacBook github/re-gh $ gh pr list
Showing 1 of 1 open pull request in Mekann2904/re-gh
ID TITLE BRANCH CREATED AT
#1 hoge dev/mekann about 2 minutes ago
(END)
(base) mekann@MekannMacBook github/re-gh $ gh pr view 1
hoge Mekann2904/re-gh#1
Open • Mekann2904 wants to merge 1 commit into main from dev/mekann • about 2 minutes ago
+1 -0 • No checks
hoge.txtを追加しました。
View this pull request on GitHub: https://github.com/Mekann2904/re-gh/pull/1
(END)
プルリクエストをレビューする
gh pr comment [PR番号]コマンドで指定したプルリクエストにコメントを追加する。実行するとデフォルトのエディタが起動し、コメントを記述できる。
(base) mekann@MekannMacBook github/re-gh $ gh pr comment 1
- Press Enter to draft your comment in vim...
? Submit? Yes
https://github.com/Mekann2904/re-gh/pull/1#issuecomment-3266264236
プルリクエストをマージする
gh pr merge [PR番号]コマンドで指定したプルリクエストをマージする。この際、マージ方法(Merge, Squash, Rebase)を選択するプロンプトが表示されることもある。
(base) mekann@MekannMacBook github/re-gh $ gh pr merge 1
練習問題
- 新規に公開レポジトリ
practice-repoを作成し、README.mdを自動生成してブラウザで開いてください。 - 既存ディレクトリからレポジトリを初期化し、同名の GitHub レポジトリを作成・関連付けてください。
- 作業用ブランチ
feature/add-readmeを作成して切り替えてください。 README.mdに1行追記し、コミットメッセージ「docs: update readme」でコミットしてください。- アップストリームを設定してブランチをリモートへプッシュしてください。
- CLI を使ってプルリクエストを作成し、タイトルを「Update README」、本文を任意で作成してください。
- 現在オープン中のプルリクエスト一覧を表示し、該当 PR の詳細を確認してください。
- PR にコメントを 1 件追加してください。
- PR をマージし、ブランチをリモートから削除してください。
- マージ後、ローカルの
mainを最新に更新し、不要になったローカルブランチを削除してください。