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
170
GitHubよちよち会#3
社内勉強会で使った資料(3回目/全3回)
はない
March 02, 2016
Tweet
Share
More Decks by はない
See All by はない
2018年目標を達成できなかった私が 今年こそ達成するためにしていること
hanahiroaze
3
500
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
230
MySQLとデッドロックの話
hanahiroaze
1
1.3k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.6k
Symfony Best Practiceを読もう!(ついでに翻訳した話)
hanahiroaze
2
900
E2E Test Tips
hanahiroaze
0
160
テストことはじめ
hanahiroaze
0
470
Symfony2のi18n対応
hanahiroaze
0
800
開発合宿に行ってきました
hanahiroaze
0
140
Other Decks in Technology
See All in Technology
生成AIではじめるテスト駆動開発
puku0x
0
130
なぜThrottleではなくDebounceだったのか? 700並列リクエストと戦うサーバーサイド実装のすべて
yoshiori
13
4.7k
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
4
1.5k
Lazy Constant - finalフィールドの遅延初期化
skrb
0
230
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
0
190
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
10
3.6k
重厚長大企業で、顧客価値をスケールさせるためのプロダクトづくりとプロダクト開発チームづくりの裏側 / Developers X Summit 2025
mongolyy
0
150
[mercari GEARS 2025] Keynote
mercari
PRO
1
310
AIエージェントによるエンタープライズ向けスライド検索!
shibuiwilliam
3
560
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
130
AIと自動化がもたらす業務効率化の実例: 反社チェック等の調査・業務プロセス自動化
enpipi
0
660
今、MySQLのバックアップを作り直すとしたら何がどう良いのかを考える旅
yoku0825
2
430
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
320
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
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.
卒業!!!