git repo를 다른 repo의 분기에 병합


122

repo Foo 및 repo Bar가 제공됩니다. 나는, 푸와 바 병합 할 하지만 단지라는 별도의 지점에 baz.

git checkout -b baz <= 여기에 Bar 저장소를 넣으십시오.

답변:


231

저장소브랜치 로 병합 할 수 없습니다 . 당신은 병합 할 수 있습니다 지점 에 다른 저장소를 가지 로컬 저장소에. 두 개의 저장소가 foo있고 bar둘 다 현재 디렉토리에 있다고 가정합니다 .

$ ls
foo bar

foo저장소 로 변경하십시오 .

$ cd foo

bar저장소를 원격으로 추가 하고 가져옵니다.

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

현재 브랜치를 기반으로 저장소에 새 브랜치 baz를 만듭니다 foo.

$ git checkout -b baz

저장소의 브랜치 somebranchbar현재 브랜치로 병합 :

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

( --allow-unrelated-historiesgit 버전 2.9 이전에는 필요하지 않음)


21
git 2.9부터 git --allow-unrelated-historiesmerge 명령 에 추가해야 할 것입니다 .
Drasill

2
: @Drasill에서 코멘트에 대한 정보 github.com/git/git/blob/master/Documentation/RelNotes/...
GaTechThomas

10
나는 내가 뭘하고 있는지 전혀 모르고 foo / bar 자리 표시 자로 이것을 읽을 수 없습니다. 누구든지 실제 실생활 예제 (적절한 경우 링크 등)로 이것을 편집 할 수 있습니까?
rien333

오, 이거 대단해. 하위 디렉토리에 병합하고 싶습니다. 그렇게 다를 수 없죠? 이 단계를 추가하고 싶습니다.
macetw

1
많은 병합 충돌이 발생합니다. 어쨌든 새 브랜치로 강제 병합 할 수 있습니까?
nomadoda

41

"실제"명령으로 업데이트되었습니다.

repo 디렉토리에서 시작하여 작업 복사본이 깨끗한 지 확인합니다 (파일이 변경, 추가 또는 제거되지 않음).


새 분기 만들기 :

git checkout -b <my-branch>

보조 리모컨을 추가 한 다음 가져옵니다.

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

현재 브랜치에서 브랜치 중 하나를 병합합니다.

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


<their-branch>당신이 원하는 것을 모르면master

모든 원격 변경 사항을 수락하고 충돌을 피하려면 ( overwrite yours ) 마지막 단계에서 -X theirs옵션으로 지정할 수 있습니다 git merge.

하위 디렉토리에 추가하려면 아마도 git 하위 모듈 을 사용해야 할 것입니다.


3

Larsks의 가이드를 사용하여 SourceTree를 사용하여이 작업을 수행 할 수있었습니다.

  1. 대상 저장소에 브랜치를 생성했습니다.
  2. 설정 버튼을 누르고 소스 저장소를 추가하여 소스 저장소를 원격으로 추가했습니다.
  3. 이제 두 저장소의 분기가 분기 목록에 표시됩니다. 병합 도구를 사용하여 소스 저장소의 분기를 새 대상 저장소의 분기로 병합했습니다.
  4. SourceTree 또는 내 IDE를 사용하여 모든 충돌을 해결했습니다.
  5. 내 지점에서 변경 사항을 커밋하십시오.
  6. 설정 단추를 사용하여 원격 목록에서 소스 저장소를 제거하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.