bauer's diary

凡人の凡人による凡人のための備忘録

本家の最新を取り込みながら安全に自分のリポジトリで修正したいとき

はじめに

本家リポジトリをforkして、それを上流に設定し、最新を取り込みながらfork先のリポジトリに修正したいときに今回の手順を踏みます。
本家に直接pushができないときに、こういった形を取ることがあります。
この流れを"Fork & Pull モデル"と呼びます。

本家リポジトリをfork

取り込みたいリポジトリを、自身のアカウントなりでforkします。
GitHubからでもいいですし、hubコマンドがある方は"hub fork"でもいいです。

hubコマンドとは、CLIGitHubの操作ができるツールです。
github.com

リモート一覧にupstream追加

取り込みたいリポジトリ"upstream"としてリモート一覧に追加します。

% git remote add upstream git@github.com:[organization or user]/[repository].git

間違って本家からリポジトリを取ってきてしまったときは、originのリモートURLを変更すればよいです。

% git remote set-url origin git@github.com:kitakitabauer/[repository].git

リモート一覧を確認すると、"upstream" が追加されていることがわかります。

% git remote -v
origin	git@github.com:kitakitabauer/[repository].git (fetch)
origin	git@github.com:kitakitabauer/[repository].git (push)
upstream	git@github.com:[organization or user]/[repository].git (fetch)
upstream	git@github.com:[organization or user]/[repository].git (push)
上流の更新を取り込む

上流の更新を取得して反映させる場合は下記の通りです。

% git fetch upstream
% git merge upstream/master

または一度にpullしてしまいます。

% git pull upstream master
ブランチ作成

ローカルリポジトリにブランチを作成してcheckoutします。

% git checkout -b [開発ブランチ名]
Switched to a new branch '開発ブランチ名'

新しいブランチに切り替わっていることを確認します。

% git branch
* [開発ブランチ名]
  master
originにpush

originに対して、ローカルで作成したブランチ名を指定して、空ブランチをpushします。

% git push origin [開発ブランチ名]
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:kitakitabauer/[開発repository].git
 * [new branch]      開発ブランチ名 -> 開発ブランチ名
差分確認

開発用ブランチとmasterブランチとの差分を表示するGitHubページを開きます。

% hub compare
CI の結果を確認する場合
% hub ci-status
上流のmasterブランチへPR作成
  • iでissueに紐付けて作成できます。
hub pull-request [branch name] -i [issue id]


おしまい。