2013-10-15 1 views
4

우리 프로젝트에는 아주 이상한 git 히스토리가 있습니다. 먼저, 다음과 같은 역사를 가지고 있습니다 다른 프로젝트가 있었다 :연결되지 않은 git 기록을 연결하는 방법은 무엇입니까?

repo1 :

a---b---c 

다음했다 우리의 프로젝트가 있었다

repo2 :

u---v---w 

우리가 repo1을 필요에 따라 repo2의 코드에서 "똑똑한"프로그래머는 repo1의 마지막 커밋 (c)을 읽기 위해 read-tree를 사용 했으므로 지금은

u---v---w---w' 

여기서 w '는 히스토리가없는 커밋 c를가집니다. 그런 다음 역사의 결과로 모두 repositorires에 약간의 변화가 있었다 :

a---b---c---d---e 

u---v---w---w'---x---y 

지금 우리가 혼란을 정리하고 우리의 저장소에 repo1의 변경 사항을 적용합니다. 그러나 단순히 두 개의 저장소를 병합 할 때 지점이 기록을 공유하지 않기 때문에 (실제로는 있지만 git은 알지 못함) 극한 충돌이 발생하므로 3 가지 병합을 수행 할 수 없습니다.

그래서 어떻게 3 가지 방법으로 병합 할 수 있습니까?

a---b---c---d---e 
      \ 
u---v---w--w'---x---y 

답변

3

repo2를 입력하고 원격

git add remote repo1 url_of_repo1 

으로 repo1를 추가 repo1의 가져 오기 역사

git fetch repo1 
: 즉, 누락 된 역사의 가장자리에 "추가"이런 일을 만들 수있는 방법이 있나요

이제 repo2 내역은

이어야합니다.
a---b---c---d---e repo1/master 

u---v---w--w' master 

보시다시피, repo1repo2 기록은 여전히 ​​관련이 없으며 공통된 커밋이 없습니다.

지금 당신은 당신이 선형의 역사와 함께 종료됩니다 merge

당신이 rebase으로

git checkout master 
git merge repo1/master 

a---b---c---d---e repo1/master 
        \ 
u---v---w--w'------x master 

을 할 것입니다 merge 또는 rebase에 두 줄 무료

git checkout -b rebasing repo1/master 
git rebase master 
git branch -f master 
git checkout master 
git branch -D rebasing 


u---v---w--w'-a---b---c---d---e master 

당신 것 물론 충돌을 해결해야합니다. 그러나 이것은 단발 문제 일뿐입니다.

w는 또한

+0

커밋에 자식을 위해, 당신의 master 지점을 이동합니다 이는

git checkout master git reset master^1 

와 커밋 당신은 또한 w' 제거 수, 리베이스 또는 병합하기 전에, 여러분의 인생을 더 쉽게 만들려면 ~ 1.7.3 ?,'repo1/master'가 "정확하다"는 것을 안다면'git rebase -Xtheirs master' (역으로'-Xours')를 사용하여 자동 해결할 수 있습니다. –