3
2

More than 1 year has passed since last update.

git 別リポジトリのコミットをできる限り安全に取り込む(同期する)

Last updated at Posted at 2022-10-10

概要

  • GitHub内の別リポジトリのコミットを取り込む(こちらで説明)
  • GitHubとGitLabを跨いだ別リポジトリのコミットを取り込む

上記のようなパターンがあるかと思いますが、どちらにも適用できます。

手順

(手順1)コマンドで登録

リモートアドレスの確認
% git remote -v
origin  git@github.com:hogehoge/repository_name_a.git (fetch)
origin  git@github.com:hogehoge/repository_name_a.git (push)
取り込み先リポジトリの登録
% git remote add copy_to_repo git@github.com:hogehoge/repository_name_b.git
再度リモートアドレスの確認
% git remote -v
copy_to_repo    git@github.com:hogehoge/repository_name_b.git (fetch)
copy_to_repo    git@github.com:hogehoge/repository_name_b.git (push)
origin  git@github.com:hogehoge/repository_name_a.git (fetch)
origin  git@github.com:hogehoge/repository_name_a.git (push)
ブランチの確認(mainブランチのコミットを対象とします)
% git branch
  develop
* main
新しくブランチを作成
% git checkout -b merge_repo_branch
Switched to a new branch 'merge_repo_branch'
再度ブランチの確認
% git branch
  develop
  main
* merge_repo_branch
取り込み先リポジトリへプッシュ
% git push copy_to_repo merge_repo_branch
...
Enumerating objects: 4321, done.
Counting objects: 100% (4321/4321), done.
Delta compression using up to 10 threads
...
remote: 
To github.com:hogehoge/repository_name_b.git
 * [new branch]      merge_repo_branch -> merge_repo_branch

新ブランチなのでプッシュするのも躊躇しなくて良い。(直接上書きされちゃう、とかない)

(手順2)GitHubで確認

プッシュ先の GitHub > repository_name_b ページで確認。(お、届いていますね。:point_down:

image.png

(手順3)コンフリクト解消

あとは、プルリクエストを作成・マージし終わり!...という簡単にはいきませんよね。
みなさん大好きのコンフリクトの面倒を見ていく必要があります。

repository_name_b リポジトリをクローンしてある場所へ移動し、コンフリクトを解消フェーズへ...

% cd repository_name_b

% git fetch 

% git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/merge_repo_branch

↑出来立てほやほやの merge_repo_branch ブランチが見えますね。

コンフリクト解消用のブランチを作成(こちらもmainから分岐)
% git checkout -b confrict_resolve
Switched to a new branch 'confrict_resolve'
ブランチ確認
% git branch -a
* confrict_resolve
  main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/merge_repo_branch
いざマージ!そしてコンフリクト発生
% git merge origin/merge_repo_branch
CONFLICT (content): Merge conflict in aaaa/bbbb/コンフリクトしたファイルA.rb
CONFLICT (content): Merge conflict in aaaa/bbbb/コンフリクトしたファイルB.rb
CONFLICT (content): Merge conflict in aaaa/bbbb/コンフリクトしたファイルC.rb
....
Automatic merge failed; fix conflicts and then commit the result.

さて

コンフリクト解消中
コンフリクト解消がんばれ〜〜 VSCodeに頼ってください。
コンフリクト解消後はプッシュ
% git push origin confrict_resolve

(手順4)プルリクエスト

プッシュ先の GitHub > repository_name_b ページで確認。(お、届いていますね。:point_down:

image.png

緑色のプルリクエストボタンから早速PR

image.png

ノーコンフリクト!(当たり前ですが

image.png

image.png

終了です。お疲れ様でした。

コツとしましては、常に確認することです。:wink:

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2