Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHubよちよち会#3
Search
はない
March 02, 2016
Technology
0
150
GitHubよちよち会#3
社内勉強会で使った資料(3回目/全3回)
はない
March 02, 2016
Tweet
Share
More Decks by はない
See All by はない
2018年目標を達成できなかった私が 今年こそ達成するためにしていること
hanahiroaze
3
450
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
150
MySQLとデッドロックの話
hanahiroaze
1
1.2k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.3k
Symfony Best Practiceを読もう!(ついでに翻訳した話)
hanahiroaze
2
770
E2E Test Tips
hanahiroaze
0
150
テストことはじめ
hanahiroaze
0
380
Symfony2のi18n対応
hanahiroaze
0
620
開発合宿に行ってきました
hanahiroaze
0
120
Other Decks in Technology
See All in Technology
ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP
yuitosato
29
12k
Autopsy of a Cascading Outage from a MySQL Crashing Bug
jfg956
0
200
Introducing Pkl
enomotok
0
240
エンジニアブランディングチームの KPI / KPI's of engineer branding team
chaspy
1
140
MongoDB Atlas Vectorsearchではじめる生成AIアプリ開発
chie8842
3
510
「XX試験の環境作ってよ」と言われた時によく使うAWSのソリューションについて
bun913
0
120
OCI Data Integration技術情報 / ocidi_technical_jp
oracle4engineer
PRO
1
1.5k
技術イベントはなんとかひねり出す 日経の技術広報の取り組み/techpr3
nishiuma
0
230
LLMプロダクト事業の立ち上げにおける挑戦
layerx
PRO
7
1.5k
Oracle Database で機械学習を始めよう! Oracle Machine Learning
oracle4engineer
PRO
1
140
AFTを運用していたらAWS Configの課金が急増していた件
msato
0
110
今さら聞けない!? AWSの生成AIサービス Amazon Bedrock入門!
minorun365
PRO
11
2.7k
Featured
See All Featured
Ruby is Unlike a Banana
tanoku
95
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.2k
Designing on Purpose - Digital PM Summit 2013
jponch
109
6.4k
Why Our Code Smells
bkeepers
PRO
330
56k
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Web Components: a chance to create the future
zenorocha
304
41k
Building Flexible Design Systems
yeseniaperezcruz
317
37k
Agile that works and the tools we love
rasmusluckow
323
20k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
In The Pink: A Labor of Love
frogandcode
137
21k
How to name files
jennybc
62
92k
For a Future-Friendly Web
brad_frost
170
8.9k
Transcript
GGiittHHuubb よちよち会 第33回 ggiittの履歴を管理しよう!!
A.local R.local 前回のおさらい GitHub.com bugfix add_function bugfix # 忘れ物追加 てへぺろ(・ω<)
$ git push origin bugfix # 最新ソースの取得 $ git fetch $ git merge origin/bugfix $ git merge bugfix # conflictを直接編集して修正
rreebbaassee VVSS mmeerrggee。 TTooddaayy’ss GGooaall rreebbaasseeこわい。 ggiitthhuubb--fflloowwとggiitt--ffllooww。
rreebbaassee iiss…� rreebbaasseeの挙動をおさらいしよう! first release bugfix bugfix master commit 2
commit 1 commit 2 commit 1 $ git rebase master bugfix modify message 変更パッチ として適用 bugfix bbuuggffiixxブランチの差分コミットが、 mmaasstteerrブランチのHHEEAADDの後ろに追加されたよ。
rreebbaassee iiss…� ? WWhhaatt hhaappppeennee nneexxtt??
rreebbaassee iiss…� first release commit 2 commit 1 modify message
bugfix 差分コミットがmmaasstteerrの後ろに着いたので、 FFaasstt--FFoorrwwaarrddできるようになった! first release commit 2 commit 1 modify message bugfix master $ git checkout master $ git merge bugfix master
local wwhheenn yyoouu “ppuullll”…� ppuullllの挙動を確認だ! $ git pull $ git
pull --rebase $ git fetch $ git merge origin/branch_name $ git fetch $ git rebase origin/branch_name clone branch_name origin/branch_name clone mod merge local branch_name origin/branch_name add clone clone mod add add add
local GitHub.com rreebbaasseeこわい first release commit 2 commit 1 master
もうちょっと複雑な場合を考えよう。 merge commit merge modify master
local GitHub.com rreebbaasseeこわい first release commit 2 commit 1 master
mmeerrggeeコミットが残っちゃた。。。 履歴をきれいにするためにrreebbaasseeしたよー! merge modify merge modify rebase modify master 分岐元がなくなっちゃった。。。
rreebbaasseeこわい 全体像
local GitHub.com rreebbaasseeこわい first release commit 2 commit 1 master
mmeerrggeeするために、リモートをppuullllすると・・・ merge modify merge modify rebase modify master merge commit merge commit 消したかった履歴が 戻っちゃう。。。
同じタイムスタンプのコミットが 2つある・・・
((どうすればいいんだよぉ。。。))
local GitHub.com rreebbaasseeこわい first release commit 2 commit 1 master
mmeerrggeeするために、リモートをppuullll ----rreebbaassee すると・・・ merge modify merge modify rebase modify master 差分 patch ・ローカルにしかない ・mmeerrggeeコミット以外 を選んでppaattcchhにするよ
local GitHub.com rreebbaasseeこわい first release commit 1 master ただし・・・ merge
modify merge modify rebase modify master 差分 patch commit 2 差分が多いとうまくできないよ
((bbeesstt pprraaccttiicceeはあるの?))
公開リポジトリにプッシュしたコミットを リベースしてはいけない WWhheenn yyoouu uussee rreebbaassee プッシュする前の作業をきれいに整理する手段 としてだけリベースを使い、まだ公開していな いコミットだけをリベースすることを心がけて いれば、何も問題はありません。
「Pro Git」 p128~134 https://progit-ja.github.io/
あなたは[[コミットの歴史]]を どうとらえますか? rreebbaassee VVSS mmeerrggee 歴史の改�ざんは絶対しない! ログが汚く((読みづらく))なっても、起きたことは 全て記録するべき!! [[コミットの歴史]]はソフトウェア成長の物語! 将来のメンテナンスのためにログは読みやすい
状態に保つべき!!
あなたは[[コミットの歴史]]を どうとらえますか? rreebbaassee VVSS mmeerrggee ログが読みづらい原因は、mmeerrggeeコミットのせ いだとするなら、 を使えばいいじゃない! [[AAuuttoo MMeerrggee]]Œホfl゚¡チ∞ーがいいよね!
PPRRが綺麗になる!!! $ git log --no-merges git log よく使うオプションまとめ http://qiita.com/take4s5i/items/15d8648405f4e7ea3039
あなたは[[コミットの歴史]]を どうとらえますか? rreebbaassee VVSS mmeerrggee
あなたは[[コミットの歴史]]を どうとらえますか? rreebbaassee VVSS mmeerrggee ~pull-requestがconflictしているとき~ グリーンにするための主な選択肢は、二種類あります。 ひとつは、自 分のブランチを、プルリクエストの対象ブランチ (普通は、フォーク元の
リポジトリの master) の先端にリベースすること。 もうひとつは、その対 象ブランチを自分のブランチにマージすることです。 GitHub 上の開発者の多くは、後者を選んでいるようです。その理由 は、先述したとおりです。 重要なのは、そこにいたるまでの歴史と、最 終的にマージしたという事実だと考えているのでしょう。 リベースをす ると、歴史がすっきりするという以外の利点はありません。そして、リベ ースはマージに比べて ずっと 難しいし、間違いを起こしやすいもので す。 「Pro Git」 p228 https://progit-ja.github.io/
ggiitthhuubb--ffllooww ・masterブランチのものは何であれデプロイ可能である ・新しい何かに取り組む際は、説明的な名前のブランチをmasterから作成する (例: new-oauth2-scopes) ・作成したブランチにローカルでコミットし、サーバー上の同じ名前のブランチにも 定期的に作業内容をpushする ・フィードバックや助言が欲しい時、ブランチをマージしてもよいと思ったときは、 プルリクエスト
を作成する ・他の誰かがレビューをして機能にOKを出してくれたら、 あなたはコードをmasterへマージすることができる ・マージをしてmasterへpushしたら、直ちにデプロイをする GitHub Flow (Japanese translation) https://gist.github.com/Gab-km/3705015
ggiitt--ffllooww ・developブランチ 開発を行うためのブランチ。開発者は、主にこのブランチ上で作業を行う。次に紹介する featureブランチなど、他のブランチで行った作業は、ここにマージされる ・featureブランチ 主要な機能を実装するためのブランチ。機能の実装やバグフィックスなど、タスクごとにfeature ブランチを作成し、作業を行う ・releaseブランチ リリースの準備を行うためのブランチ。プロダクトをリリースする前に、このブランチを作成し、微 調整を行う。releaseブランチを作成することで、リリース準備と次のバージョンに向けた開発の
コードを分けることができる ・masterブランチ リリースしたソースコードを管理するためのブランチ。リリース作業を行うと、releaseブランチは masterブランチへマージされて、リリースタグが打たれる。開発者は、このブランチへのコミット は行わない ・hotfixブランチ リリースされたソフトウェアに緊急の修正を行うためのブランチ。このブランチでの修正内容は、 すぐにリリースされるので、hotfixブランチはリリースを管理するmasterブランチへマージされる いまさら聞けない、成功するブランチモデルとgit-flowの基礎知識 http://www.atmarkit.co.jp/ait/articles/1311/18/news017_2.html
bbrraanncchh ppoolliiccyy ? WWhhaatt iiss ddiiffffeerreennccee??
ggiitt--ffllooww VVSS ggiitthhuubb--ffllooww ggiitthhuubb--ffllooww には、「リリース」の概念 がない。 ((mmaasstteerrへのmmeerrggee == 本番デプロイ)) ppuullll--rreeqquueesstt
による開発範囲の表明 $ git commit --allow-empty
HHaavvee aa GGoooodd GGiitt LLiiffee!! TThhaannkk yyoouu!!
AAnnyy qquueessttiioonnss??
Q.
卒業!!!