githubでforkしたリポジトリから本家にpush

昨日いっていた問題が解決したので,あらためてgithubでforkしたリポジトリから本家にpushする方法.

本家にコミット権があるのが前提なので,ふつうは本家をcloneして作業すれば問題ないです.ただ,途中までforkで開発してたんだけど,ある日,コミット権をもらったりして本家に反映したいような時には便利です.

以下folkしたリポジトリのcloneのmaster branchにて,

# remote リポジトリを設定する
$ git remote add jugyo git@github.com:jugyo/termtter.git
$ git fetch jugyo

# git pullして本家の変更を取り込む
$ git pull --rebase jugyo

# 変更をgit pushする
$ git push jugyo

いろいろまわり道したけど,すごいやったことある,コレ.

おまけ

remote の master をもとにした別のbranchをローカル作成してたのが,昨日のはまりポイントだったみたい.ローカルのmaster branchは残しておいて,本家の変更点をmergeした上でpushしたいとかなら以下の方法が使える.

# ここはいっしょ
$ git remote add jugyo git@github.com:jugyo/termtter.git
$ git fetch jugyo

# ローカル に本家branchを作成
$ git checkout -b jugyo-master jugyo/master #
$ git merge master

# push
$ git pull --rebase jugyo master # 念のため
$ git push jugyo jugyo-master:master # jugyo-master -> master

最後のpushの使い方がよくわかっていなかったけどman読んだらちゃんと書いてありました.単に

$ git push jugyo master

としてしまうと ローカルのmaster branchをリモート(jugyo)のmaster branchにpushするという意味になります.本来はローカルのjugyo-master branchをリモートのmaster branchにpushしたいので.

$ git push jugyo jugyo-master:master

という書き方になります.