概要
- 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
ページで確認。(お、届いていますね。
(手順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 ページで確認。(お、届いていますね。
緑色のプルリクエストボタンから早速PR
ノーコンフリクト!(当たり前ですが
終了です。お疲れ様でした。
コツとしましては、常に確認することです。