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の竜(りょう)です。「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、東海岸のボストン近郊でウェブ制作を開始。帰国後、東京のウェブ制作会社に勤務。現在は組織のウェブ担当者として日英バイリンガルウェブサイトの運営に携わっています。より詳しくはこちら

記事へのコメントはもちろん、執筆・翻訳、レスポンシブなウェブサイト制作、コラボのご相談などもTwitter @rriver またはFacebook でお気軽にご連絡ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です