質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

1回答

211閲覧

Git rebaseの使い方が正しいか知りたい

shunta80

総合スコア96

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

0クリップ

投稿2024/01/27 04:26

実現したいこと

rebaseについての疑問点を解消したい
リモートに1度pushしているブランチをrebaseすると必ずforce pushが必要になるが、現在のrebaseの使い方が正しいか知りたい

発生している問題・分からないこと

以下のrebaseの手順が正しいか知りたい

2チームで開発を進めている
devブランチからfeature-Aとfeature-Bを作成し,それぞれ開発を進める
※両ブランチともレビューしてもらうためリモートにはpush済み
先にdevブランチにfeature-Aをmerge
その後feature-Bをdevブランチにmergeする→この時devブランチはfeature-Aのmerge分1コミット進んでいる状態

この状態でローカルでfeature-Bをrebaseしてdevブランチの最新を取り込む
rebase後devブランチにfeature-Bをmerge

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

一度リモートにpushしたブランチはrebaseしてはいけないという記事があった
反対にrebaseをするとforce pushが必要になるのはしょうがないという記事もあった

そもそもリモートにあげたブランチをrebaseしなければforce pushの作業は発生しないと思うので
今回のrebaseの使い方が正しいのかわからない

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

作業中のブランチ (feature-B) を、更新されたベースブランチ (この質問ではdev) でrebaseすること自体は、必要があればやってよいと思います。

たとえば、ベースブランチの更新 (この質問ではfeature-Aをdevにmergeしたこと) がfeature-Bでの変更とコンフリクトするようになった場合を考えてみます。

  • feature-Bをすぐにdevにmergeしてよいのであれば、mergeコミットでコンフリクト解消作業をすればいいのでrebaseは不要です。しかし、mergeにはレビューを経るなどある程度の時間がかかるのが普通ですので現実的ではないかもしれません。
  • feature-Aをmergeした後のdevをfeature-Bにmergeしてそれをpullしてくれば、コンフリクトは解消されます。しかしfeature-Bの作業中にfeature-Aの履歴が割り込むことになり、feature-Bの作業者としては作業しにくいかもしれません。履歴も複雑になります。
  • feature-Aをmergeした後のdevでfeature-Bをrebaseしてやれば、上述のような問題はありません。

もちろん、rebaseしたものをpushするにはforce pushが必要になります。force pushはコミットのハッシュが変わってしまうので好まない人もいるのかもしれません。ですが逆に、コミット履歴がきれいになるようにコミットの分割・統合などをしたがる人もいます。後者のような人にとっては、コンフリクト解消などの手間がいらず履歴がきれいなrebaseずみブランチの方が好ましいでしょう。

要は、force pushは必ずだめなのではなく、何をやっているのか分かっていて使うのならよいと思います (もっともプロジェクトによってはforce pushを禁止している場合もあるでしょうから、そういった場合はプロジェクトの方針に従うべきでしょうが)。

投稿2024/01/27 08:23

編集2024/01/27 08:36
ikedas

総合スコア4354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shunta80

2024/01/28 02:57 編集

回答ありがとうございます。 devブランチから作成したfeature-Bブランチでの開発が難航して,その間devブランチはどんどん更新されている。 といった状況になった場合,feaure-Bをrebaseしてdevブランチの更新を定期的に取り込むといった使い方は問題ないですか?
ikedas

2024/01/28 07:06 編集

実際にそのようなことはできます。ですから、特にやってはいけない理由がなければ、やってよいでしょう。 その場合、「問題ないですか」という問いは状況や事情による限定がなく適用範囲が無制限なので、ちょっと答えられないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問