SlideShare a Scribd company logo
Code for KOSEN 勉強会 #4
を使う準備をしよう
2015.11.08 @yamasy1549
git 中級編
$ ブランチ
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
こいつを
$ ブランチ
こうじゃ
$ ブランチ
ブランチ = 木の枝
たとえば新しい機能を追加したいとする。
新しく書くコードにはバグがあるかも
安全の保証されていないコードを
本番環境にどんどん送るのはこわい
今まさに動いてるサービスだったら…
$ ブランチ
本番環境とは別の時間軸をつくって作業
完全に分離されているので、
その中であれば失敗しても OK
機能ごとにブランチをつくって
完成したら幹に統合すればすっきり
幹 枝
なかったコトに…
$ ブランチ
慣習とか
・幹となるブランチの名前は「master」が多い
・ブランチをつくることを「切る」「生やす」という
・ブランチを master(本番のブランチ)に
 統合することを「マージ」という
$ ブランチ
①ブランチ切る
②作業 ③マージする
④めでたく統合
$ ブランチ
①ブランチ切る
②作業\あれ、うまくいかない…/
\master じゃなくてよかった/
$ ブランチ
①ブランチ切る
②作業
\やっぱ仕様変更!/
\え、ちょっっっ/
$ ブランチ
$ git branch
存在するブランチを一覧表示
デフォルトでは master になってるよ!
$ ブランチ
$ git checkout -b ブランチ名
$ git branch
新しくブランチを作成してそこに移動
再度確認すると、ブランチが増えているはず
$ ブランチ
$ git checkout 移動先のブランチ名
$ git branch -m 旧名 新名
「checkout」で他のブランチに移動できる
名前の修正も可能
$ git での開発 flow 基本形
「git 管理よろしくね」init
編集
add
commit
push
作業リポジトリでコードを書く
commit 待ちエリアに登録
変更をまとめる
共有リポジトリに送る
$ git での開発 flow 復習
リポジトリ作る
ディレクトリを作る
「git 使います」宣言
基本形
最初のひと 2 番目以降のひと
もう作られてる
clone / pull する
もう使われてる

編集・add・commit・push

$ git での開発 flow 復習

A さん

B さん
今までの例
①赤にした
②push
③pull ④緑にした
⑤push
$ git での開発 flow 復習

A さん

B さん
①赤にした
②push
③pull ④緑にした
⑤push
push されるのを待たないと開発ができない?
$ git での開発 flow 復習

A さん

B さん
①赤にした
②push
③pull ④緑にした
⑤push
そんなことはない!
$ コンフリクト(競合)

A さん

B さん
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
$ コンフリクト(競合)

A さん

B さん
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
clone-push 間に他の人の変更があると…><
$ コンフリクト解消の流れ
pull
add
最新のファイルを手元に取り込む
競合したところがあれば修正
修正したファイルを add
rebase を続行する
修正
master(本番)ブランチに移動
開発ブランチに戻る
master の変更を開発ブランチに反映rebase
continue
$ コンフリクト解消の流れ①②
pull
add
rebase
continue
$ git pull origin master
一番最後に push した人は
手元の変更履歴と共有リポジトリの変更履歴が一致する。
それ以外の人は
手元の変更履歴と共有リポジトリの変更履歴の差分をみて
git が自動的に差分を取り込んでくれる。
コーチとペアになってやってみよう!
①はじめに 2 人とも最新のファイルを手元に取り込む

pull
add
rebase
continue
$ コンフリクト解消の流れ①②
$ git checkout -b ブランチ名
$ git branch
新しくブランチを作成してそこに移動
今いるブランチ名の横に「*」マークがつく
pull
add
rebase
continue
$ コンフリクト解消の流れ①②
$ vim index.html
$ git add index.html
$ git commit -m“message”
タイトルを書き換えてみよう!
(<title></title> で囲まれた中の文字)
pull
add
rebase
continue
$ コンフリクト解消の流れ①
$ git push origin ブランチ名
②まず 1 人目だけが push する
master
1 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて
 1 人目のブランチを master にマージする
Pull request・ぷるりく
・このブランチではこんな変更を行いました!
・これを(別の任意のブランチに)マージしてほしいから
 ちょっとコード見て確認してもらえますか?
などを書いて他の人にお知らせできる機能
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて
 1 人目のブランチを master にマージする
Pull req のタイトルと本文を記入して
「Create pull request」で送信
・本文には、どういった変更を加えたのか書く
・見た目を変更したなら、スクショとか貼れると good
・開発中気になったことがあればそれも
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて
 1 人目のブランチを master にマージする
master
1 人目のブランチ
2 人目の人は、コードを見てよさそうなら
「Merge pull request」を押してマージしてあげよう!
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git push origin ブランチ名
④次に 2 人目が push する
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
⑤Pull request を書いて
 2 人目のブランチを master にマージする
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
2 人目のブランチには   が含まれていないので
うまく master とマージできない…
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout master
ブランチを master に移動

pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout master
$ git pull origin master
GitHub の master にある最新のファイルを
手元の master ブランチに取り込む

pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout ブランチ名
自分の作業ブランチに戻る

pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout ブランチ名
$ git rebase master
作業ブランチの変更を守りつつ、
master ブランチの変更を取り込んでくれる

pull
add
rebase
continue
$ コンフリクト解消の流れ②
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②

・
・
CONFLICT (content): Merge conflict in index.html
When you have resolved this problem
run "git rebase --continue".
If you would prefer to skip this patch,
instead run "git rebase --skip".
To restore the original branch and stop rebasing
run "git rebase --abort".
pull
add
rebase
continue
$ コンフリクト解消の流れ②

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<<<<<<< HEAD
<title> ごちうさ </title>
=======
<title> あいまいみー </title>
>>>>>>> commit タイトルをあいまいみーに変更
</head>
・
・ Git が、どっちを優先すればいいかわからなかった
pull
add
rebase
continue
$ コンフリクト解消の流れ②

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title> あいまいみー </title>
</head>
・
・
master 側(HEAD)と自分の変更点を比べて、
必要ない部分を削除していく
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git add index.html
変更したファイルを add する
(commit はしない!)

pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git rebase --continue
rebase を続ける
まだコンフリクトしてるとこがあれば出てくる

pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git push -f origin ブランチ名
再 push
歴史を書き換えたので、強制 push(-f)
pull
add
rebase
continue
$ コンフリクト解消の流れ②
今度は「Merge pull request」が押せるはず!
master
2 人目のブランチ

More Related Content

What's hot

Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみた
Akira Suenami
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
add20
 

What's hot (20)

Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
ジャンク解析入門
ジャンク解析入門ジャンク解析入門
ジャンク解析入門
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみた
 
ネットワーク超入門
ネットワーク超入門ネットワーク超入門
ネットワーク超入門
 
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
Spring Boot to Quarkus: A real app migration experience | DevNation Tech TalkSpring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
Gplとの付き合い方
Gplとの付き合い方Gplとの付き合い方
Gplとの付き合い方
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)
 
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おうペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
 
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 

Viewers also liked (6)

Gitの使い方(rabese -i編)
Gitの使い方(rabese -i編)Gitの使い方(rabese -i編)
Gitの使い方(rabese -i編)
 
Git rebase
Git rebaseGit rebase
Git rebase
 
rebaseにまつわる3つの誤解
rebaseにまつわる3つの誤解rebaseにまつわる3つの誤解
rebaseにまつわる3つの誤解
 
SVN経験者のためのGIT入門
SVN経験者のためのGIT入門SVN経験者のためのGIT入門
SVN経験者のためのGIT入門
 
Git, Github超入門
Git, Github超入門Git, Github超入門
Git, Github超入門
 
会社紹介スライド Lineked in
会社紹介スライド Lineked in会社紹介スライド Lineked in
会社紹介スライド Lineked in
 

Similar to gitを使う準備をしよう - 中級編 (6)

バージョン管理
バージョン管理バージョン管理
バージョン管理
 
Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!
 
Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]
 
gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編
 
Fission で 始める Containerless Kubernetes #serverlesstokyo
Fission で 始める Containerless Kubernetes #serverlesstokyoFission で 始める Containerless Kubernetes #serverlesstokyo
Fission で 始める Containerless Kubernetes #serverlesstokyo
 
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方
 

More from Sanae Yamashita

企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
Sanae Yamashita
 
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたいRubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Sanae Yamashita
 

More from Sanae Yamashita (20)

vivliostyle.orgではじめるCSS組版チュートリアル
vivliostyle.orgではじめるCSS組版チュートリアルvivliostyle.orgではじめるCSS組版チュートリアル
vivliostyle.orgではじめるCSS組版チュートリアル
 
Vivliostyle Theme 開発ガイドラインの公開
Vivliostyle Theme 開発ガイドラインの公開Vivliostyle Theme 開発ガイドラインの公開
Vivliostyle Theme 開発ガイドラインの公開
 
Vivliostyle Themes のハンズオン
Vivliostyle Themes のハンズオンVivliostyle Themes のハンズオン
Vivliostyle Themes のハンズオン
 
スピーディーな本作りとカスタマイズ可能な本作りのための Vivliostyle Themes プロジェクト #vivliostyle
スピーディーな本作りとカスタマイズ可能な本作りのための Vivliostyle Themes プロジェクト #vivliostyleスピーディーな本作りとカスタマイズ可能な本作りのための Vivliostyle Themes プロジェクト #vivliostyle
スピーディーな本作りとカスタマイズ可能な本作りのための Vivliostyle Themes プロジェクト #vivliostyle
 
CSS組版やってみた! #Vivliostyle
CSS組版やってみた! #VivliostyleCSS組版やってみた! #Vivliostyle
CSS組版やってみた! #Vivliostyle
 
読解・QRコード(かんたんなやつ) #nitaclt
読解・QRコード(かんたんなやつ) #nitaclt読解・QRコード(かんたんなやつ) #nitaclt
読解・QRコード(かんたんなやつ) #nitaclt
 
きみはPNGの仕様書を読んだか?
きみはPNGの仕様書を読んだか?きみはPNGの仕様書を読んだか?
きみはPNGの仕様書を読んだか?
 
UIデザインの心理学
UIデザインの心理学UIデザインの心理学
UIデザインの心理学
 
軍歌でわかるドイツ語(わからない)
軍歌でわかるドイツ語(わからない)軍歌でわかるドイツ語(わからない)
軍歌でわかるドイツ語(わからない)
 
この夏、絶対モテるフォント選びのコツ #nitaclt
この夏、絶対モテるフォント選びのコツ #nitacltこの夏、絶対モテるフォント選びのコツ #nitaclt
この夏、絶対モテるフォント選びのコツ #nitaclt
 
Hello world! にときめかなかった僕が情報系を名乗るまで
Hello world! にときめかなかった僕が情報系を名乗るまでHello world! にときめかなかった僕が情報系を名乗るまで
Hello world! にときめかなかった僕が情報系を名乗るまで
 
おいしい!GitHub ~GitHub Patchwork Tokyo @dots 夏休み版~
おいしい!GitHub ~GitHub Patchwork Tokyo @dots 夏休み版~おいしい!GitHub ~GitHub Patchwork Tokyo @dots 夏休み版~
おいしい!GitHub ~GitHub Patchwork Tokyo @dots 夏休み版~
 
『UIデザインの心理学』周辺視野 - #kosen14s 第1回読書会 Day4 -
『UIデザインの心理学』周辺視野 - #kosen14s 第1回読書会 Day4 -『UIデザインの心理学』周辺視野 - #kosen14s 第1回読書会 Day4 -
『UIデザインの心理学』周辺視野 - #kosen14s 第1回読書会 Day4 -
 
Are you a Designer or an Engineer?
Are you a Designer or an Engineer?Are you a Designer or an Engineer?
Are you a Designer or an Engineer?
 
Me and GitHub
Me and GitHubMe and GitHub
Me and GitHub
 
CSSをさわってみよう
CSSをさわってみようCSSをさわってみよう
CSSをさわってみよう
 
HTMLをさわってみよう
HTMLをさわってみようHTMLをさわってみよう
HTMLをさわってみよう
 
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
企業ロゴに学ぶ 頭を使わないスライド作り 色で悩む時間を減らそう
 
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたいRubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
Rubotyに名前をつけて可愛がってかしこく育てて一緒に暮らしたい
 
git-followup @明石高専2E
git-followup @明石高専2Egit-followup @明石高専2E
git-followup @明石高専2E
 

Recently uploaded

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 

Recently uploaded (8)

本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 

gitを使う準備をしよう - 中級編