6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubのPullRequestの取り込み方まとめ

6
Posted at

GitHubで別ブランチからのプルリクを取り込むには3つの方法があります。

[Create a merge commit], [Squash and merge], [Rebase and merge]です。

それぞれがどんな挙動になるのかよく分からなかったのでテスト用のリポジトリを作って試してみました。

まとめ

結論から言うと、
[Create a merge commit]は、2つのブランチの履歴をそのまま両方から受け継いだ新しいコミットを上乗せする

[Squash and merge]は、マージされるブランチの履歴を無かったことにして結果だけを纏めたコミットを上乗せする

[Rebase and merge]は、マージされるブランチ内での履歴を維持しつつ、それらを上乗せする

といった感じですかね、説明が下手ですみません、以下を見てもらえれば詳しくわかると思います。

テスト方法

親コミットからそれぞれの"create-a-merge-commit"等の名前でブランチを切り(図中のhogeブランチ)、2つのブランチで交互にファイルを一つづつ追加してコミットしていきます。

そしてhogeブランチからmasterブランチにプルリクを飛ばしてそれぞれの方法でマージします。

ではやってみましょう!!

IMG_0600.jpg

とその前に最初に一応空のコミットを追加しておきます。ちなみに空のコミットはコマンドラインから"--allow-empty"オプションをつけるとできます。
スクリーンショット 2017-01-18 23.58.31.png

Create a merge commit

masterブランチとcreate-a-merge-commitブランチで交互にコミットした後です。

スクリーンショット 2017-01-19 0.34.48.png

こんな感じですね。デスクトップアプリだと上の直線の履歴の所に"マージしたよ〜!"って感じのマークが出てきて、左のコミット履歴ではマージコミットが新しく追加されてcreate-a-merge-commitブランチのコミットは消えてますね。

スクリーンショット 2017-01-19 0.36.06.png

ブラウザ上だと時系列通り交互にコミットが積み重なった後で更にマージコミットが追加されています。なんだかややこしいですね。

スクリーンショット 2017-01-19 0.36.11.png

そしてこのコミットは"master 2"コミットと"create-a-merge-commit 2"コミットの2つを親として持っています。

スクリーンショット 2017-01-19 1.39.48.png

Squash and merge

masterブランチとsquash-and-mergeブランチで交互にコミットした後です。

スクリーンショット 2017-01-19 0.41.18.png

デスクトップアプリだと左のコミット履歴ではマージコミットが一つ増えてますが、上の直線の履歴の所には普通のコミットとして記録されているようですね。

スクリーンショット 2017-01-19 0.42.53.png

ブラウザ上でもマージコミットのみ、squash-and-mergeブランチでのコミットは跡形もありません。

スクリーンショット 2017-01-19 0.42.55.png

これを見るとブランチのコミットを全て一纏めにしてコミットを追加しているようですね。

スクリーンショット 2017-01-19 1.40.02.png

Rebase and merge

masterブランチとrebase-and-mergeブランチで交互にコミットした後です。

スクリーンショット 2017-01-19 0.46.02.png

こちらでは時系列に関係なくマージされたブランチのコミットが親ブランチHEADの上に乗っけられてます。マージコミットは作成されないようです。

スクリーンショット 2017-01-19 1.28.29.png

これもデスクトップアプリとブラウザ上で見た目は変わりませんでした。

スクリーンショット 2017-01-19 0.47.39.png

終わりに

それぞれで結構細かい挙動が違う事が分かりました。

個人的には[Squash and merge]を使ってmasterブランチは綺麗に保っていきたいなと思いました。

マージされてclosedなプルリクの詳細ページからマージ前のブランチのコミット履歴が全て見れるみたいですし(マージ後のブランチを削除した後でも!!)。

スクリーンショット 2017-01-19 1.54.10.png

では皆さん、PullRequestsを活用して楽しいGitHubライフを👍

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?