git repoを別のリポジトリのブランチにマージします


120

レポフーとレポバーを与えられました。私は、fooでバーをマージしたいが、唯一と呼ばれる別の支店、にbaz

git checkout -b baz <=ここにBarリポジトリを配置します。

回答:


230

リポジトリブランチにマージすることはできません。あなたはマージすることができブランチに別のリポジトリからのブランチローカルリポジトリに。2つのリポジトリがfooあり、barどちらも現在のディレクトリにあると仮定します。

$ ls
foo bar

fooリポジトリに変更します。

$ cd foo

barリポジトリをリモートとして追加してフェッチします。

$ git remote add bar ../bar
$ git remote update

現在のブランチが何であるかに基づいてbazfooリポジトリに新しいブランチを作成します。

$ git checkout -b baz

リポジトリのブランチsomebranchbar現在のブランチにマージします。

$ git merge --allow-unrelated-histories bar/somebranch

--allow-unrelated-historiesgitバージョン2.9より前のバージョンでは必要ありません)


21
git 2.9以降では、おそらく--allow-unrelated-historiesgit mergeコマンドに追加する必要があります。
Drasill 2017年

2
:@Drasillからのコメント上の情報github.com/git/git/blob/master/Documentation/RelNotes/...
GaTechThomas

10
私は何をしているのかわからず、foo / barプレースホルダーでこれを実際に読むことはできません。誰かがこれを実際の実際の例(適切なリンクなど)で編集できますか?
rien333 2017

ああ、これは素晴らしいです。それをサブディレクトリにマージしたいと思います。そんなに違うことはありませんよね?そのステップを追加したほうがいいです。
macetw 2017年

1
マージの競合がたくさん発生します。とにかく、新しいブランチに強制的にマージできますか?
nomadoda

41

「実際の」コマンドで更新:

repoディレクトリから始めて、作業コピーがクリーンであることを確認してください(ファイルが変更、追加、削除されていない)。


新しいブランチを作る:

git checkout -b <my-branch>

セカンダリリモートを追加し、それをフェッチします。

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

ブランチの1つを現在のブランチにマージします。

git merge <repo-name>/<their-branch>


どちら<their-branch>が欲しいかわからない場合は、master

すべてのリモート変更を受け入れ、競合を回避する(自分のものを上書きする)ことが確実な場合は、最後のステップでの-X theirsオプションとして指定できますgit merge

サブディレクトリに追加する場合は、おそらくgitサブモジュールを使用する必要があります


3

ラスクのガイドを使用して、SourceTreeを使用してこれを行うことができました。

  1. 宛先リポジトリにブランチを作成しました
  2. [設定]ボタンをクリックしてソースリポジトリを追加することにより、ソースリポジトリをリモートとして追加しました。
  3. 両方のリポジトリからのブランチがブランチリストに表示されます。マージツールを使用して、ソースリポジトリからのブランチを新しい宛先リポジトリのブランチにマージしました。
  4. SourceTreeまたは私のIDEを使用して競合を解決しました
  5. ブランチの変更をコミットします。
  6. [設定]ボタンを使用して、リモートリストからソースリポジトリを削除します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.