
バージョン管理システムの目的は変更履歴を管理することなんだから、git rebase とか履歴を改変するコマンドは言うまでもなくダークサイド
2012-11-09 16:58:32
@bleis メインラインの履歴をきれいに見せる目的で rebase が濫用されることが多くてそれに対して言ってます https://t.co/f5wvWTqE
2012-11-09 17:04:31
@kazuho 巨大なbranchのrebaseは反対ですけど、トピックブランチを採用する場合、メインラインの履歴をきれいに見せる目的でのrebaseは悪ではないのでは?
2012-11-09 17:06:38
@bleis [訂正] うんと、rebase&&merge --ffな運用だと、たとえば3つのコミットから構成されるトピックブランチがあるとして、その3つのコミットいずれの段階でも正しく動くことを(rebaseの後にも)検証しないと master に入れたくなくないですか?
2012-11-09 17:22:23
@kazuho 3つのコミットが1つのトピックを表していることが何らかの方法で分かるのであれば、最終コミットのみで動けばいいですし、そういう方法がないのであれば、squashすべきだと考えます。
2012-11-09 18:11:36
@bleis 「3つのコミットが1つのトピックを表していること」を表現するための方法がトピックブランチ + merge --no-fだ、という点はまずよろしいですか?それを使わずにコメントを読んでどのコミットが最終コミットか確認したりsquashして情報を欠落させるメリットは何?
2012-11-09 18:17:04
git merge で --no-ff すべき理由についても触れられている / “見えないチカラ: A successful Git branching model を翻訳しました” http://t.co/tZztPxOn
2012-11-09 18:20:07
@kazuho 3つのコミットが1つのトピックを表していることを表現する方法の一つとしてno-ffがあるのはいいですが、別にマージコミットだけがそれを表現する方法じゃないです。トピックをチケットと1対1対応させるのであればチケットで管理できますし、他の方法も考えられます
2012-11-09 18:20:17
@bleis mainlineに、特定のトピックにおける作業途中のコミットを入れてしまうとbisectが困難になりますよね。となると、全てのトピックブランチをsquash mergeすることになりますが、それって不便じゃないですか?
2012-11-09 18:22:29
@bleis それは良くないです。masterへmergeしてCONFLICTで処理するか、masterからトピックブランチへmergeして整合性をとるべきです (続く)
2012-11-09 18:25:45
@kazuho なぜなら、rebaseしてしまうとトピックブランチを構成する各コミットの文脈が変わるから。それぞれのコミット「できていた」はずのことができなくなっていたりする。rebaseされる各コミットについていちいちテストして修正するなら別だけど
2012-11-09 18:26:35
@bleis いや、たとえばトピックブランチをサーバにpushして他の人にレビューしてもらってる間にmasterが更新されたらどうするんでしょう? 別名のトピックブランチを作ってそこでrebase masterする?
2012-11-09 18:32:17
@kazuho そもそも開発メンバーが少数なので、pushしてのレビューってフローを取り入れてないのもありますけど、トピックブランチは基本独立した作業になっているので、masterにrebaseしたところで矛盾が起こるようなことはめったにないような環境ですね
2012-11-09 18:34:45
ちょうどこの前も git merge --no-ff でいいじゃんという話をしたけど、git 初心者の人が rebase の誇大広告に惑わされて merge より rebase を使おうとしてしまうのが問題な気がする。
2012-11-09 18:37:17
@bleis なるほどです。CONFLICT の発生を前提にする必要がないのであれば rebase でも十分かもしれません
2012-11-09 18:38:21