[Git] GitHub: 実録!pull request (前編)
GitHub 上のプロジェクトへプルリクエストをしてみます。
複数人数でのチーム開発に加わった場合も、初回の手順はこんなフローになりそうなイメージ。
お手本を参考に進めます。
Contents
プロジェクトファイルを取得する
GitHub にあるプロジェクトのファイルをローカルに落とします。
Fork する
GitHub のプロジェクトをブラウザで開き、Fork します。
今回は、cask を追加することにします。
git clone する
- Fork したプロジェクトをローカルに git clone します。
% git clone git@github.com:DriftwoodJP/homebrew-versions.git
Cloning into 'homebrew-versions'...
remote: Reusing existing pack: 1062, done.
remote: Total 1062 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1062/1062), 143.55 KiB | 137.00 KiB/s, done.
Resolving deltas: 100% (561/561), done.
Checking connectivity... done.
Fork したプロジェクトファイルをもとに作業を行う
作業用ブランチを作成する
- 必ず作業用のブランチを作成する
- ブランチ名は意図が分かりやすいものにする(ex. spike, prototype)
% cd homebrew-versions/Casks
% git checkout -b add_firefox-ja
Switched to a new branch 'add_firefox-ja'
作業内容を add, commit する
作業を行い、ローカルリポジトリにコミットします。
% git add .
% git commit -m 'added Firefox for Japanese'
[add_firefox-ja c85d2b5] added Firefox for Japanese
1 file changed, 7 insertions(+)
create mode 100644 Casks/firefox-ja.rb
作業用ブランチをリモートに push する
Fork したプロジェクトに、ローカルで作業したブランチを同名のリモートブランチとして push します。
remote の情報とローカルブランチを確認します。
% git remote -v
origin git@github.com:DriftwoodJP/homebrew-versions.git (fetch)
origin git@github.com:DriftwoodJP/homebrew-versions.git (push)
% git branch
* add_firefox-ja
master
push します。
% git push origin add_firefox-ja
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 495 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@github.com:DriftwoodJP/homebrew-versions.git
* [new branch] add_firefox-ja -> add_firefox-ja
元のプロジェクトの更新を反映する
作業中に Fork したプロジェクトに更新があった場合、これに追随します。
本家リポジトリを remote に追加する
まず、本家のリポジトリを remote に追加しておきます(追加していない場合のみ)。
% git remote add upstream git@github.com:caskroom/homebrew-versions.git
% git remote -v
origin git@github.com:DriftwoodJP/homebrew-versions.git (fetch)
origin git@github.com:DriftwoodJP/homebrew-versions.git (push)
upstream git@github.com:caskroom/homebrew-versions.git (fetch)
upstream git@github.com:caskroom/homebrew-versions.git (push)
本家リポジトリの更新を取り込む
master ブランチに移動します。
% git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
更新を取り込みます。
この手順は、以前のエントリーも参考になるかも知れません。
% git fetch upstream
From github.com:caskroom/homebrew-versions
* [new branch] master -> upstream/master
% git diff upstream/master
% git merge upstream/master
Already up-to-date.
取得した upstream/master をローカルのmasterブランチと同期させます。
(今回はリモートに更新はありません。)
rebase
コンフリクトが起きた場合は解決します。
(今回は行わなかったがまた学習する。)
% git checkout add_firefox-ja
Switched to branch 'add_firefox-ja'
% git rebase master add_firefox-ja
Already on 'add_firefox-ja'
Current branch add_firefox-ja is up to date.
同期・rebase した内容をリモートに push する
同期・rebase した内容を Fork したプロジェクト(GitHub)へ push します。
(今回は更新はない状態。)
% git push origin master
Everything up-to-date
pull request 用に commit を1つにまとめる
本家のリポジトリを汚さないよう、pull request 用の commit をひとつにまとめます。
(今回は行わなかったがまた学習する。)
以下、お手本のサンプル。
$ git checkout myFeatureSpike
$ git checkout -b myFeature
$ git rebase -i master
2つめ以降の commit をすべて squash
指定します。
以前にやった際には、このような手順でした。
pull request する
pull request 用のブランチをリモートに push する
pull request 用のブランチを Fork したプロジェクト(GitHub)に push します。
% git remote -v
origin git@github.com:DriftwoodJP/homebrew-versions.git (fetch)
origin git@github.com:DriftwoodJP/homebrew-versions.git (push)
upstream git@github.com:caskroom/homebrew-versions.git (fetch)
upstream git@github.com:caskroom/homebrew-versions.git (push)
% git push origin add_firefox-ja
Everything up-to-date
GitHub から pull request を行う
GitHub の Fork したプロジェクトページをブラウザで開き、pull request を行います。
今回は以下になります。
画面左側のセレクトメニューから、pull request 用のブランチを選択し、緑のプルリクエストマークをクリック。
差分が表示されます。
さらに緑のボタンをクリックで進めます。
pull request のコメントを書き、リクエストを完了します。
pull request が送られました。