Skip to content

Instantly share code, notes, and snippets.

@tomohiro
Created September 8, 2012 04:34
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomohiro/3671809 to your computer and use it in GitHub Desktop.
Save tomohiro/3671809 to your computer and use it in GitHub Desktop.
Git 道場 #2 in JavaKueche

Git 道場

自己紹介

復習

Git道場 技 本日の課題、 テクニックの解説

コンフリクトを解消するテクニックの Kata

  • merge
  • rebase

merge で解消

リモートの更新を取り込む

$ git pull

コンフリクトを解消する

$ vi <conflict file>
$ git add <conflict file>
$ git commit -m 'some comment' <conflict file>

リモートにプッシュする

$ git push origin master

rebase で解消

リモートの更新を取り込む

$ git pull --rebase

コンフリクトを解消する

$ vi <conflict file>
$ git rebase --continue

リモートにプッシュする

$ git push origin master

git pull --rebase

マージコミットの履歴が残らない

コミット履歴が直列になる

作業中のブランチがリモートで更新される可能性がある場合に使用する

今日やること

ブランチ(トピックブランチ)

リベース

プルリクエスト

Kata

ブランチ・リベース・プルリクエスト

1. トピックブランチ

"トピックブランチとは、短期間だけ使うブランチのことで、何か特定の機能やそれに関連する作業を行うために作成します。"

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>

ブランチを作ったら

目的の作業を実行する

  • ファイルを作ったり
  • コードを編集したり
  • ディレクトリを削除したり

ブランチ内でのコミットについて

  1. タイミング 好きなタイミングでコミットしてください
  2. コメント 自分が見てわかるように書いてください

作業が終わったら

自分が作業したブランチをリモートに送信する

$ git push origin <branch-name>

本日の題材その1

  1. リポジトリをフォークする
  2. トピックブランチを作る
  3. ブランチへ移動して作業する コミットは複数回行うこと
  4. 作業が終わったらリモートにプッシュする

リポジトリ情報

フォーク対象のリポジトリ

https://github.com/Tomohiro/try-git-rebase

2. プルリクエスト

リモートにトピックブランチが作成されたら, アップストリーム(フォーク元)にプルリクエストができる

プルリクエストの画面

タイトルや本文を記入して「Send pull request」する

本日の題材その2

プッシュしたトピックブランチからアップストリームにプルリクエストをしてください

アップストリーム(Tomohiro/try-git-rebase:master)

リベース?

マージコミットを残さずにコミットログを直列に出来る

ここまでが前回やったところ

リベースは他にも

複数のコミットを一つにまとめるという機能を持っている

プルリクエストとリベース

なぜリベースするか?

プルリクエスト(パッチ)を受け取る側に立って考える

  • ブランチの派生元の歴史を気にしてほしい
  • 細かいコミットよりもアトミックなコミットが望ましい

これが出来ていないと,パッチを受け取った側がマージで苦労する!!

リベースしていないと

頑張って作ったパッチがプロジェクトに取り込まれる可能性が少くなる

「Rebase it」と言われて受け取ってもらえない

リベースしよう その1

アップストリームのリポジトリ URL を登録する

$ git remote add upstream https://github.com/otheruser/repo.git

ブランチの派生元をアップストリームと同期する

$ git checkout master
$ git pull upstream master

アップストリームと同期するブランチでは作業しない

リベースしよう その2

  1. アップストリームのブランチを元にトピックブランチを作る
  2. 作業をする
  3. リベースする <-- new
  4. リベースしたブランチをリモートに送信する

リベースしよう その3

コマンド

master ブランチから rebase する場合

$ git checkout <my-topic-branch>
$ git rebase -i master

-i で $EDITOR が起動し,コミット一覧を見ながらどういう操作をしたいか選択する

リベース時の操作

  • pick - コミットをそのまま使用する
  • squash - コミットを使うが,直前のコミットに合成する
  • fixup - squash と同じだがコミットメッセージを破棄する

コメント

リベースしてコミットをまとめる時のコメントには気を遣うべき

変更に対する短い(50文字以下の)要約

もし必要なら、より詳しい説明を述べる。約72文字ほどで折り返すようにせよ。
ある文脈では、最初の行はE-Mailの件名になり、残りのテキストが本文になる。

本日の題材その3

  1. アップストリームの master と自分のリポジトリの master を同期させる
  2. トピックブランチを作成しリベースする
  3. リベースしたトピックブランチをプッシュしてプルリクエストする

アップストリームの情報

まとめ

  • ブランチは気軽に作れてコミットも簡単にできる
  • しかしリモートにブランチをプッシュする際は慎重に
  • ブランチ・リベース・プルリクエストという Kata を身につければ怖くない

おまけ

参考資料

本日の題材その1

コマンドの例

フォークする

ブラウザで実行

フォークしたリポジトリを手元に持ってくる

$ git clone git://github.com/myname/try-git-rebase.git
$ cd try-git-rebase

トピックブランチを作る

$ git branch my-topic-branch

ブランチへ移動して作業する コミットは複数回行うこと

$ git checkout my-topic-branch
$ vi file1
$ git add file1
$ git commit -m 'add file1'
$ vi file2
$ git add file2
$ git commit -m 'add file2'
$ vi file1
$ git add file1
$ git commit -m 'fix comment'

作業が終わったらリモートにプッシュする

$ git push origin my-topic-branch

本日の題材その3

コマンドの例

アップストリームの master と自分のリポジトリの master を同期させる

$ git remote add upstream https://github.com/Tomohiro/try-git-rebase.git

トピックブランチを作成しリベースする

ブランチの作成とファイルの編集

$ git checkout my-topic-branch
$ vi file1
$ git add file1
$ git commit -m 'add file1'
$ vi file2
$ git add file2
$ git commit -m 'add file2'
$ vi file1
$ git add file1
$ git commit -m 'fix comment'

ブランチの派生元をアップストリームと同期させる

$ git checkout master
$ git pull upstream master

リベースする

$ git checkout my-topic-branch
$ git rebase -i master

リベースしたトピックブランチをプッシュしてプルリクエストする

プッシュ

$ git push origin my-topic-branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment