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

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

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

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

Q&A

解決済

2回答

1533閲覧

gitでリモートの方がローカルよりも進んだ時のプルリクエスト・マージ・リベースに関して

nutti

総合スコア7

Git

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

0グッド

0クリップ

投稿2021/11/09 09:03

編集2021/11/18 05:20

疑問:ローカルにcloneしたリポジトリを作業して、pull requestを送る際に、リモートの方も更新されてしまった時の対処方法

他社とのgitの運用が初めてで、お客様の方で用意されたgitのリモートリポジトリの構成環境でどうしたらいいのかわからず質問させていただきました。
別の関連サイトと混合になっているリポジトリがあり、自分が担当したサイトの更新をローカルで作業し、リモートリポジトリへ反映する際にどうしたら良いかわからない状況です。

cloneして進めてくださいと言われたものの、最終的なこの合わせこみの段階の工程がわかりませんでした。

調べていると、こういった共同開発でしたら、
GithubですとForkという機能があってrebaseすると良いなどと色々な解説サイトがあったのですが、
先方が使っている普通のGit(gitolite3)でどうしたら良いかがわかりませんでした。

gitの構成に関して

gitのリモートリポジトリのディレクトリ構成が下記のようになっています。(先方が使っているので、構成を変えれない)

リポジトリ sample.git ┣ サイトA ┃ ┣ サイトAの構成ファイル ┃ ┗ 多数.... ┣ サイトB ┃ ┣ サイトBの構成ファイル ┃ ┗ 私が今回あげてほしいと言われた箇所、

上記のような構成になっており、私はサイトBのディレクトリ内しか変更せず、先方はサイトAのディレクトリ内しか変更しません。

詳細

サイトAmainブランチで作業が進められています。
上記のgitのリポジトリ構成で、今回私が作業した内容をサイトBのディレクトリを用意したのでここに保存してほしいと言われました。
早速cloneして作業を進めていますが、先方の方でもmainブランチを更新し続けています。
ここで、mainブランチではなく、新しく作業用ブランチdevブランチを作成して作業を進めようと考えています。
そしてpushして、pull requestをした際にいざどうなるのか?疑問になりました。

下記行った作業内容です。

# git cloneでリモートのリポジトリ内容をローカルへ取得 git clone xxx:/sample.git # ローカルのリポジトリ作成 git init # リモートリポジトリの追加 git remote add origin xxx:/sample.git # 作業用ブランチの作成 git checkout -b dev # サイトBの修正とコミット git add xxxx git commit -m "サイトB修正コミット"

この段階でリポジトリ状態は下記の状態です。
●はコミットを表しています。

・mainブランチ(リモート) ● -> ● ----------> ●② ①↘︎ ・devブランチ(ローカル) ● -> ● -> ●③ ①cloneしたタイミング ②先方が更新したサイトAに関するコミット ③ローカルの最新のコミット

現在はここで止まっています。
次にリモートのリポジトリに作成したdevブランチpushするのかなと思っています。

# devブランチをpush git push origin dev

そして最後に、devブランチの内容をpull requestするのかなと思っています。
しかし、上図の③のコミットには、②にされたサイトAのコミットは含まれていません。
このままpull requestを出すと、コンフリクトが起きてしまうのかなと思います。
これを解決する方法があるのかがわかりませんでした。

下記イメージ画像です。

イメージ説明

知りたいこと

私がローカルでサイトBの更新作業をしている間にも、サイトAの更新は続きます。
ローカルで作成したブランチdevをどのようにしてリモートのmainブランチと合わせていけばいいのかがわかりません。
私側ではサイトAは、一切関与しないので、ローカルで作業を進めている間にリモートリポジトリは更新され、最終的にmainブランチdevブランチうを合わせる時にmainブランチの作業が進んだ分衝突が発生してしまうのでは?と思うのですが、
実際の作業者(pull requestを処理するひと)はこれを気にすることなく、サイトBだけをmainのブランチに合わせ込むことができるのでしょうか?
また、私は先方が助かる!というような状況を作るには、どうすることが最善なのでしょうか?

勉強不足で申し訳ないのですが、ご教示いただければ幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/11/10 06:45

ブランチがローカル含めたどのリポジトリのブランチかが不明確です。 作業する場所(リボジトリ)を明確にした上で、可能であればコマンドライン記述で疑問に思ってることを具体的に記載して頂けないでしょうか? コマンドが扱えないのであれば、使用ツールを記載の上、gitもツールも知らない人がその説明だけで間違いなく同じ操作になる粒度でご説明ください。
退会済みユーザー

退会済みユーザー

2021/11/17 01:49

よくわかりませんが全てリモートの話で、コマンドラインも不明と仮定してアバウトな返事だけしておきます。時間かかりすぎているので、私からはこれ以上書き込みません。 普通にマージなので、コンフリクトがなければそのままマージされ、コンフリクトがあれば途中で止まり、手動で解消してマージを続けるか中止するか選ぶことになると思います。
guest

回答2

0

しかし、私はサイトBしか更新しないのですが、作業内容をpushし、pull requestをかけた際に、サイトAで差分が発生してしまうのかなと思うのですが

サイトBしか更新しないならサイトAのソースコードに差分は発生しないと思います。

投稿2021/11/09 09:38

mather

総合スコア6759

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

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

nutti

2021/11/09 19:03 編集

ご回答いただきありがとうございます! ここでは差分が発生しないのですね! 私がブランチdevブランチを作り、サイトBの作業を進めて 最終的にサイトAを更新し続けているメインブランチにマージをした時に サイトAは作業ブランチdevを分岐した時よりも進んでいるので差分が発生するのかと思いました。
guest

0

ベストアンサー

LocalはサイトAを触っていないのですから差分は生じますが、何も気にすることはないです。pullすれば差分は解消します。

むしろ、
リモートでサイトBが更新されると、場合によってはlocalの修正と重なって「衝突」することがあります。この対処方法を学ぶ方が良いでしょう。

投稿2021/11/18 06:58

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問