Githubでの初PR(pull request)がマージされたので,備忘録代わりに作成手順を記しておく.
PRしたのはこのリポジトリで,#25と#26の修正である.
ブランチ作成と修正コミット
まず,修正対象となるレポジトリをcloneする.
今となっては先に自分のリポジトリにforkして,そのforkしたリポジトリをcloneした方がスムーズだったかもしれない.
修正する内容のbranchを作成し,コードを修正,作成したbranchにコミットする.今回は下記のようにした.
git checkout -b fix/start-iteration-init
git add openevolve/controller.py
git commit -m "Fix: Define start_iteration before initial program creation to avoid UnboundLocalError"
GitHubでリポジトリをフォークする
最初,上記コミットを直接リモートリポジトリへpushしたが,当然ながらオリジナルのリモートリポジトリへの書き込み権限はないのでpushできず.ChatGPTに相談しforkして自分のリポジトリにpushするやり方を教えてもらった.
- ブラウザで本家リポジトリ(例: https://github.com/codelion/openevolve )にアクセス
- 右上の「Fork」ボタンをクリックし、自分のGitHubアカウントにリポジトリを作成
自分のリポジトリ(myfork)をリモートに追加
git remote add myfork git@github.com:<your-username>/openevolve.git
自分のリポジトリ(myfork)にpush
git push myfork fix/start-iteration-init
自分のリポジトリ(myfork)から本家リポジトリへPull Request作成
- GitHubの自分のリポジトリ(myfork)ページにアクセス
- 「Compare & pull request」または「New pull request」ボタンをクリック
- ベースリポジトリ(例: codelion/openevolve)のmainブランチに対して、自分のfix/start-iteration-initブランチからPRを作成
- タイトル・説明を記入し、作成
既存修正(A)を新しい修正(B)にcherry-pickして開発・PRする方法
先のPRをした後,別の修正も気になったため,追加でPRしたくなったものの,先のPR(以降Aとする)がまだマージされていなかったため,下記の手順でPRを作成した.
Aの修正コミットIDを調べる
git log fix/start-iteration-init
mainから新しい作業ブランチを作成
git checkout main
git pull origin main
git checkout -b feature/new-fix
Aの修正をcherry-pickで一時的に適用
git cherry-pick <AのコミットID>
その後,Bの修正を加える.
cherry-pickの修正を除外
cherry-pickしたコミットを巻き戻し,unstageする.
git reset --soft HEAD^
git restore --staged <cherry-pickしたコミットのファイル>
HEAD^
の部分は<戻りたいコミットID>
としても良い.
Bの修正だけをコミット
git add <Bの修正のファイル>
などでBの修正だけを選択的にステージし、コミット
pushしてPR作成
git push origin feature/new-fix
GitHubでPRを作成.
余談
openevolveはBlackによるPythonのスタイル統一をしているが,コミット前にそれを把握していなかったため,コミット後、CIによるスタイルチェックでBlackの基準に合っていないとのエラーをいただいた.
そこで homebrew でBlackをインストールし,ソースをBlackで修正して再度コミット.無事に本家レポジトリからマージ承認をいただけました.
初PR経験を通して,GitHubでのPRの流れがわかったのはもちろんのこと,gitの使い方やPythonスタイルのblackなどの知識を得ることができ,勉強になった.
Leave a Reply