GUIとコマンドラインのそれぞれでプルリクエストを送る方法と注意点

Advertisement

先日レビューを書いた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ユーザ名]:[ブランチ名]

About the author

Rriverのステッカーが貼られたMacBookの向こうにいる自分のMemojiの似顔絵

「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら

ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net Twitter @rriver 、またはFacebook までご連絡ください。