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

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

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

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

1回答

1062閲覧

リモートの親ブランチを最新化する方法

mmmmeru

総合スコア1

Git

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

0クリップ

投稿2022/10/07 10:06

前提

ローカル・リモート両ブランチ
・master
・develop
・feature/develop
・topic/xxxxx

masterは本番コード
developは動作確認用
feature/developはmasterの子ブランチ
topic/xxxxはfeature/developの子ブランチ

Aさんはfeature/developを作成し、topic/xxxxブランチで作業している
BさんとCさんはAさんが開発中にもどんどん開発し、developが更新されている
Aさんがtopic/xxxxを完了し、プルリクを出すとdevelopがB,Cさんによって更新されていたので
リーダーに「developを取り込んで、feature/developを最新化してください」
と言われている。

実現したいこと

リモートの派生元ブランチ(feature/develop)の最新化

発生している問題

前提条件のような時に、リモートの派生元ブランチを最新化する方法はありますでしょうか?

試したこと

逆流PRなど(できそうと思ったが、もっとスマートなやり方がありそう、、)

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

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

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

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

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

Zuishin

2022/10/07 10:45 編集

feature/develop をチェックアウトして develop を マージするのが普通のやり方ですが、develop から派生していないのにマージできるのかという質問ですか?
mmmmeru

2022/10/07 11:11

単純に前提条件の時に、feature/developをどのように最新にするのか?っていう質問です。 ローカルだとmergeコマンドで済みますが、リモートだと記事などで見つけられなかったので、、
Zuishin

2022/10/07 11:21

ローカルに fetch してから行います。 fetch や pull を知らないということでしょうか? それともまだ何か書いていない条件がありますか?
mmmmeru

2022/10/07 11:32

fetch や pull を知らないということでしょうか? わかっています。 それともまだ何か書いていない条件がありますか? 条件はこれ以上ないです。 ①developをfetch ②ローカルのfeature/developからfローカルにfeature/develop-childブランチを作成 ③develop-childブランチにdevelopをマージ ④develop-childブランチをpush(base: feature/develop) ⑤PRが通ったら、feature/developのdevelop取り込み完了 のような手順で合ってますかね?
Zuishin

2022/10/07 11:46

新しいブランチを作る必要はありませんが、失敗したらいけないので保険で作るのもいいかもしれませんね。 事情がよくわかりませんが、リーダーに聞くのが良いというアドバイスをもらっているので、具体的なことは聞くのが良いと思います。
guest

回答1

0

ベストアンサー

何度も書きますが、
最終的にはリーダーに聞き返してください。

「teratailで誰々さんに教わりましたのでこの方法やりました」とか言いながら
チーム内のコミット履歴がぶっ壊れたら質問者であるあなたの責任です。
たった一言聞き返して教えてもらえば良いのに、無償で外部の人間に聞いて責任取ってくれとか言われても知らんよとしか言えません。


その上で貴方のリーダーの内容を要約すると、

あなたがfeature/develop ブランチで積み上げてきたコミットの下に、
BさんやCさんのコミット履歴を滑り込ませてくれ。

こう言っているのだと推測できます。

その時に使うのはgit rebaseコマンドです。
これは主にコミット履歴を修正・改ざんする恐ろしいコマンドですが、
多くの機能がオプション指定で雑多に含まれているだけの話であり、
その中の「滑り込ませる」機能だけを利用する場合は比較的シンプルなコマンドで済みます。

少し調べたらこういう記事を見つけたので読んでみてください。
参考記事: 【初心者向け】git rebaseの基本 - Zenn

その上でコマンド履歴で示すとこんな感じになります。

bash

1# 現状の作業ブランチの確認 2$ git branch 3 master 4 develop 5* feature/develop 6 topic/xxxxx 7 8# まずはdevelopブランチを最新にする 9$ git checkout develop 10$ git pull origin develop 11$ git checkout feature/develop 12 13# feature/developブランチの複製をとっておく 14$ git checkout -b tmp 15 16# rebaseでdevelopブランチのコミット履歴をtmpブランチの下に滑り込ませる 17$ git rebase develop

これでコンフリクト等が発生しなければ、
晴れてdevelopブランチのコミット履歴をfeature/developブランチに滑り込ませた
tmpブランチが作成完了となります。

正常動作を確認したら
feature/developに戻ってgit rebase developを実行しましょう。

bash

1#ブランチの確認 2$ git branch 3 master 4 develop 5 feature/develop 6 topic/xxxxx 7 tmp 8 9$ git checkout feature/develop 10$ git rebase develop 11 12# topicにもこの変更を持っていく 13$ git checkout topic/xxxx 14$ git rebase feature/develop 15 16# ここまで成功したらtmpブランチは不要なので削除 17$ git branch -d tmp

コンフリクト等で怒られた場合

コンフリクトを解消してからgit rebase --continueするように
Gitコマンドから指示がありますが、
一旦なかったことにして逃げたいと思う場面があるかもしれません。

その時はgit rebase --abortコマンドを実行しましょう。


以上、私が現場で質問文のような状況下に置かれた場合、
「私だったら先輩にこう聞き返すよ」という内容の共有でした。

これで概ね問題ないと思いますが
git rebaseコマンドは多くのオプションを使ってありとあらゆるコミット履歴の改ざんを行えてしまう。
つまり今まであなた達が積み上げてきたコミット履歴を簡単にぶっ壊す事もできてしまう恐ろしいコマンドです。
勝手に変なコマンド飛ばして環境ふっとばしても私は責任取れません。

勉強した後はちゃんとリーダーに質問・確認してから作業してくださいね。
最初の1回目は先輩に土下座してコマンド打ち込む姿を見てもらうとか、
リモートワークしてるなら画面共有しながらボイチャで教えてもらうとかしましょう。

投稿2022/10/07 10:51

miyabi-sun

総合スコア21397

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

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

mmmmeru

2022/10/07 11:14

ご回答ありがとうございます > あなたがfeature/develop ブランチで積み上げてきたコミットの下に、 > BさんやCさんのコミット履歴を滑り込ませてくれ。 自分の認識では、 developをfeature/developにmergeしてほしい という意味だと捉えていましたが、 この質問は、ローカルだとmergeコマンドあるけど、リモートだとmergeはどうするんですか?という質問です。
miyabi-sun

2022/10/07 11:22 編集

mergeした場合はそのまま`git push origin feature/develop`が効くと思います。 怒られたら`git push -f origin feature/develop`のようにforceオプションを付与してください。 ただまぁ、その辺踏まえてリーダーに聞いてください。
Zuishin

2022/10/07 11:25

過去の質問に該当するものがないように思いますが、この質問者の別アカウントの話ですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問