先日レビューを書いたGitの入門書「わかばちゃんと学ぶGit使い方入門 」でGithubでプルリクエストを送る方法を覚えたんですが、本で紹介されていたのはSourceTreeを使ったやり方だったので、コマンドラインでできないか調べてみました。
客: 「コマンドラインでプルリクなんて、ないですよね…?」
マスター: 「 … 」
マスター: 「あるよ」
客: 「あ、あるんですね…」
SourceTreeとGithubウェブサイトを使ったやり方
詳しくはわかばちゃん本 を読んでいただくとして、SourceTreeとGithubウェブサイトを使ってプルリクする手順は大まかに以下の通りです。
手順 | ツール | |
---|---|---|
1. | 元リポジトリをフォークする | Githubウェブサイト |
2. | 自分のGithubアカウントに作られたリポジトリをクローンする | SourceTree |
3. | 作業用のブランチを作って変更をコミットする | SourceTree |
4. | 自分のGithubアカウントのリポジトリにプッシュする | SourceTree |
5. | プルリクエストを送る | Githubウェブサイト |
6. | 元アカウントのリポジトリにマージされる | Githubウェブサイト |
すべてGUIで出来るので初心者にもわかりやすくて良いですね。
コマンドラインのみでプルリクエストを送る方法
すべてGUIで出来るのはわかりやすくて良いんですけど、SourceTreeとGithubウェブサイトを行き来しなくてはいけないので若干面倒ですね。ということで、コマンドラインのみでできないかググってみたらありました。
hub というコマンドラインツールを使えばいいんですね。
1. hubのインストールと設定
Homebrewでhubをインストールします。
brew install hub
シェルの設定ファイル(僕はzshを使っているので「.zshrc」)に以下を追加します。
eval "$(hub alias -s)"
2. プルリクを送りたいリポジトリをクローン
プルリクエストを送りたいリポジトリをローカルにクローンします。
git clone [Githubユーザ名]/[リポジトリ名]
3. 作業用ブランチを作って変更をコミット
作業用のブランチを作ります。
git checkout -b [ブランチ名]
ファイルを変更してコミットします。
git add .
git commit -m "コミットメッセージ"
4. フォークする
自分のGithubアカウントにリポジトリをフォークします。
git fork
5. 変更をプッシュする
git push [自分のGithubユーザ名] [作業用ブランチ名]
6. プルリクエストを送る
git pull-request
これでプルリクエストが送れちゃいます。楽ですね。
7. masterブランチを同期しておく
ただ、このあと自分のアカウントのリポジトリのmasterブランチが取り残された状態になるので、元リポジトリのmasterからフォークしたリポジトリのmasterブランチにプルしてファイルを追随しておきましょう。
git checkout master
git pull origin master
自分のリモートにもプッシュしておきます。
git push [自分のGithubユーザ名] master
作業用のブランチのHEADも合わせておきます。
git checkout [作業用ブランチ]
git merge master
git push [自分のGithubユーザ名] [作業用ブランチ]
これで以下のファイルが同期されます。
- 元リポジトリ
- 自分のGithubアカウントのリポジトリ
- ローカル・リポジトリ(masterと作業用ブランチ)
設定されるリモート・リポジトリについての注意点
ちなみに上記のようにhubを使ってプルリクをすると、リモート・リポジトリは以下のようになります。
> git remote -v
origin git@github.com:[元リポジトリのGithubユーザ名]/[リポジトリ名].git (fetch)
origin git@github.com:[元リポジトリのGithubユーザ名]/[リポジトリ名].git (push)
[自分のGithubユーザ名] git@github.com:[自分のGithubユーザ名]/[リポジトリ名].git (fetch)
[自分のGithubユーザ名] git@github.com:[自分のGithubユーザ名]/[リポジトリ名].git (push)
originが元リポジトリの方になるので注意が必要です。知らずにgit push
だけでプッシュしちゃうと元リポジトリにプッシュすることになってしまいます。-u
オプションで自分のGithubの方を指定しておくと良いかもしれないですね。
git push -u [自分のGithubユーザ名] master
※-u
オプションは--set-upstream
の省略版
SourceTreeとGithubウェブサイトでやった場合
SourceTreeとGithubウェブサイトを使ったやり方だとoriginが自分のリポジトリになります。途中までSourceTreeを使ってプルリクからコマンドでやる場合、単にgit pull-request
コマンドを打っただけでは自分のリポジトリにプルリクが送られてしまうので要注意です。あまりないシチュエーションだと思いますけど。
この場合、以下のようにプルリクするリポジトリを指定すれば元リポジトリにプルリクを送ることができます。
git pull-request -b [元リポジトリのGithubユーザ名]:[ブランチ名]
参考
以下のサイトを参考にさせていただきました。ありがとうございました!
Git / GitHub関連の他の記事
2018年8月28日に公開され、2020年8月7日に更新された記事です。
About the author
「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら。
ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net 、Twitter @rriver 、またはFacebook までご連絡ください。