Coda 2 + GitHub で Fork 元の変更を MERGE する

Fork と Pull Request は対になっている GitHub の機能で、Fork は「ちょいと拝借いたしますよ」、Pull Request は「いじってみたんで見てちょーだい!」ということだと理解しました。Fork すると自分のところに Fork 元の一式がコピーされるので、コミットしてプッシュして Pull Request どーん!!

と、ここまでは順調だったのですが、2 回目の Pull Request を行いたい場合 Fork 元のファイルは自分が 1 回目に Pull Request を行って MERGE された時点より後にさらに変更があったとします。手元のファイルを最新の状態にするにはどうすんの!!というのが今回のテーマです。

Twitter で聞いてみた

「GitHub で Fork 元と自分のところにあるやつが違ってるときはどうすれバインダー」鍵なので埋め込みできないしょんぼり

ここで方向性が見えてきた!安川さんありがとう!!しかし出てくる情報は黒画面でコマンド打てというものばかりで、Coda 2 で何をしたらいいのか全くわからない。

黒画面で打てばいいんでないの

そもそも Coda 2 は Git に対応しているのであって GitHub に対応しているわけではない。Fork や Pull Request は GitHub の機能だから Coda 2 で設定などあるわけない!ということに気付きまして、Coda 2 の黒画面を使えば一応 Coda 2 内で完結してるよねー。と無理やり納得して黒画面に向かったわけですよ。

いでよターミナル!!(ずずーん

upstream の設定

Syncing a fork という GitHub のヘルプページを発見。upstream を設定して Fetch してから MERGE しなって書いてある。

$ git remote -v
origin  https://github.com/xxxxx/xxxxx.git (fetch)
origin  https://github.com/xxxxx/xxxxx.git (push)

origin しかないことを確認して、

$ git remote add upstream https://github.com/ooooo/ooooo.git

Fork 元のレポジトリを upstream に追加して、

$ git remote -v
origin  https://github.com/xxxxx/xxxxx.git (fetch)
origin  https://github.com/xxxxx/xxxxx.git (push)
upstream  https://github.com/ooooo/ooooo.git (fetch)
upstream  https://github.com/ooooo/ooooo.git (push)

増えてる!

Fetch と MERGE

ファイルを持ってこーい!という指示をします。

$ git fetch upstream

Fork 元のファイルを取ってきて、

$ git branch -va

確認して、MERGE するんだけど場合によってやり方が違う。

$ git checkout xxxxx
$ git merge upstream/xxxxx

こっちはローカルで変更を行っている場合に、

git merge upstream/xxxxx

こっちはローカルで変更を行っていない場合に使う。いずれも xxxxx はブランチの名称。

自分の Fork 先にプッシュする

ローカルには Fork 元の最新ファイル一式が飛んできたわけだけど、GitHub 上は MERGE 前の情報が残っています。ここからはターミナルを離れて Coda 2 の GUI を使うよ!

Push ボタンから origin を選択してぽちっとな。GitHub のページを開くと Fork 元と Fork 先(自分のところ)が同じになっています。これで完了!!次からは upstream の設定は済んでいるので、Fetch と MERGE のみ行います。

MERGE と marge

ここまでなぜ MERGE と大文字表記したかというと、最後の MERGE が何度やってもうまくいかず、むっきーとなっていたらこんなログが目に入り…

$ git marge upstream/xxxxx
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
        merge
$ git marge upstream/xxxxx
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
        merge
$ git marge upstream/xxxxx
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
        merge
$ git marge upstream/xxxxx
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
        merge
$ git marge upstream/xxxxx
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
        merge

あ、あれ…?(つд⊂)ゴシゴシ

Did you mean this?
        merge

「もしかして:merge」

もう絶対 MERGE の綴り忘れないわ一生!!ちなみに marge はマーガリンのことらしいですよ。Did you mean 〜 も忘れない!!(´;ω;`)

コメントを残す

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