- 平良知広
- 所属: 株式会社オーシーシー
- https://github.com/Tomohiro
コンフリクトを解消するテクニックの Kata
- merge
- rebase
リモートの更新を取り込む
$ git pull
コンフリクトを解消する
$ vi <conflict file>
$ git add <conflict file>
$ git commit -m 'some comment' <conflict file>
リモートにプッシュする
$ git push origin master
リモートの更新を取り込む
$ git pull --rebase
コンフリクトを解消する
$ vi <conflict file>
$ git rebase --continue
リモートにプッシュする
$ git push origin master
マージコミットの履歴が残らない
コミット履歴が直列になる
作業中のブランチがリモートで更新される可能性がある場合に使用する
ブランチ(トピックブランチ)
リベース
プルリクエスト
ブランチ・リベース・プルリクエスト
"トピックブランチとは、短期間だけ使うブランチのことで、何か特定の機能やそれに関連する作業を行うために作成します。"
Git - 3.3 Git のブランチ機能 - ブランチの管理
ブランチを作成
git branch <branch-name>
ブランチへ移動する
$ git checkout <branch-name>
$ git checkout master
ブランチ名を確認する
git branch
ブランチをリモートに送信する
git push origin <branch-name>
ブランチの削除
git branch -d <branch-name>
ブランチをリモートから削除する
git push origin :<branch-name>
目的の作業を実行する
- ファイルを作ったり
- コードを編集したり
- ディレクトリを削除したり
- タイミング 好きなタイミングでコミットしてください
- コメント 自分が見てわかるように書いてください
自分が作業したブランチをリモートに送信する
$ git push origin <branch-name>
- リポジトリをフォークする
- トピックブランチを作る
- ブランチへ移動して作業する コミットは複数回行うこと
- 作業が終わったらリモートにプッシュする
フォーク対象のリポジトリ
https://github.com/Tomohiro/try-git-rebase
リモートにトピックブランチが作成されたら, アップストリーム(フォーク元)にプルリクエストができる
タイトルや本文を記入して「Send pull request」する
プッシュしたトピックブランチからアップストリームにプルリクエストをしてください
アップストリーム(Tomohiro/try-git-rebase:master)
マージコミットを残さずにコミットログを直列に出来る
ここまでが前回やったところ
複数のコミットを一つにまとめるという機能を持っている
なぜリベースするか?
プルリクエスト(パッチ)を受け取る側に立って考える
- ブランチの派生元の歴史を気にしてほしい
- 細かいコミットよりもアトミックなコミットが望ましい
これが出来ていないと,パッチを受け取った側がマージで苦労する!!
頑張って作ったパッチがプロジェクトに取り込まれる可能性が少くなる
「Rebase it」と言われて受け取ってもらえない
アップストリームのリポジトリ URL を登録する
$ git remote add upstream https://github.com/otheruser/repo.git
ブランチの派生元をアップストリームと同期する
$ git checkout master
$ git pull upstream master
アップストリームと同期するブランチでは作業しない
- アップストリームのブランチを元にトピックブランチを作る
- 作業をする
- リベースする <-- new
- リベースしたブランチをリモートに送信する
コマンド
master ブランチから rebase する場合
$ git checkout <my-topic-branch>
$ git rebase -i master
-i で $EDITOR が起動し,コミット一覧を見ながらどういう操作をしたいか選択する
- pick - コミットをそのまま使用する
- squash - コミットを使うが,直前のコミットに合成する
- fixup - squash と同じだがコミットメッセージを破棄する
リベースしてコミットをまとめる時のコメントには気を遣うべき
変更に対する短い(50文字以下の)要約
もし必要なら、より詳しい説明を述べる。約72文字ほどで折り返すようにせよ。
ある文脈では、最初の行はE-Mailの件名になり、残りのテキストが本文になる。
- アップストリームの master と自分のリポジトリの master を同期させる
- トピックブランチを作成しリベースする
- リベースしたトピックブランチをプッシュしてプルリクエストする
- GitHub: https://github.com/Tomohiro/try-git-rebase
- Git: https://github.com/Tomohiro/try-git-rebase.git
- ブランチは気軽に作れてコミットも簡単にできる
- しかしリモートにブランチをプッシュする際は慎重に
- ブランチ・リベース・プルリクエストという Kata を身につければ怖くない