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

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

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

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

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Q&A

解決済

1回答

838閲覧

GitでリモートAのaブランチの変更をリモートBのbブランチに取り込みたい

pen_ari

総合スコア50

Git

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

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

0グッド

0クリップ

投稿2021/08/18 04:07

Gitをちょっと特殊なユースケースで使用したく、どのように行えば効率的に実施できるのかわからずこまっています

要件;gitlabのリポジトリのmasterブランチの変更をAWS codecommitのdevブランチに取り込みたいのですが、
その際、devブランチのfoo/bar以下のファイルについてはそのままとしたい

現状は以下の手順で行っています

  1. リモートをcodecommitに設定済みのローカルリポジトリからfoo/bar配下を退避
  2. 1の残りを削除
  3. gitlabからmasterをclone
  4. 退避しておいたfoo/bar配下を配置
  5. リモートリポジトリをcodecommitに設定しdevブランチに向けpush

どうにかローカルからディレクトリ削除等行わずに済む方法はありませんでしょうか?

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

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

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

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

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

hoshi-takanori

2021/08/18 04:31

基本的にローカルで a ブランチの内容を b ブランチに取り込んで、それをリモート B に push することになるかと。 ローカルのファイルをいじりたくないなら、別の場所に git clone (または作業ディレクトリを丸ごとコピー) すれば良いのでは。
guest

回答1

0

ベストアンサー

大前提として
2つのリポジトリのホスティングサービスで全く同じプロジェクトを管理する場合になります

Gitにはgit remoteというサブコマンドがあり、
リモートリポジトリを選択することが可能です。

とりあえずgit remote add [name] [URL]で登録しましょう。
この辺の情報はproject-name/.git/configファイルにテキストデータとして保存されているので
使っているテキストエディタで開いて確認すれば現在どういう風になっているかが確認出来ます。

git remoteの1つ目のデフォルト名はoriginです。
なのでgit clone プロジェクトURLでGitHubかなんかから落として来た時、
GitHubのリモート名はoriginになっているはずです。
そのへんもproject-name/.git/configファイルに記載されています。


さて、質問文の本題に切り込みましょう。

要件;gitlabのリポジトリのmasterブランチの変更をAWS codecommitのdevブランチに取り込みたい

とりあえずgit remote add [name] [URL]で2つのリポジトリを登録します。
そしてgit fetchコマンドでリポートブランチとローカルの同期を行います。

その後、git branch -aという風に全てを示す-aオプション付きで実行すると
両方のブランチが表示されているはずです。

要件をコマンドの羅列にすると下記になるでしょう。

bash

1$ git remote add gitlab [URL] 2$ git remote add codecommit [URL] 3 4# 作業する前にfetchでリモートリポジトリを更新 5$ git fetch --all 6 7# devブランチを消したくない想定 8# tmpブランチを作成して逃し、現在のdevブランチを削除 9$ git checkout dev 10$ git checkout -b tmp 11$ git branch -D dev 12 13# 作業対象のcodecommit/devに移動 14$ git checkout codecommit/dev 15 16# gitlabのマスターをrebaseモードで取り込む 17# (別にこの辺はmergeでよしなに合成しても良いが、rebaseは下に潜り込ませて正史を書き換えてからそれに対する修正とする感じ) 18$ git rebase gitlab/master 19 20# rebaseで下のコミット履歴を編集したので、フォースオプションで無理やり上書きする必要がある 21$ git push -f codecommit dev 22 23# 退避させたdevブランチを復活させる 24$ git checkout tmp 25$ git branch -D dev 26$ git checkout -b dev 27$ git branch -d tmp

投稿2021/08/18 04:51

miyabi-sun

総合スコア21158

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

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

pen_ari

2021/08/18 07:05

根本的にリモートリポジトリを名前で分けて登録できるというところを知りませんでした 実現したかったことが実現できました。 非常に助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問