2010-12-16 4 views
3

누군가의 git repo를 포크하여 A, B, C 및 D를 저지른다고 가정 해 봅니다. 그러면 내가 벚꽃을 피우는 persom은 A와 C를 선택하므로 A '와 C'가됩니다. 그는 또한 자신의 커밋 X, Y 및 Z를 만듭니다. 그래서이 모든 후에 내 지부는 A B C D를 가지며 A C 'X Y Z를가집니다. 두 가지 지사가 게시되므로 rebase는 매력적인 옵션이 아닙니다. 또한 X Y Z가 A B C D와 충돌하지 않는다고 가정합니다.이 두 가지를 어떻게 효과적으로 병합합니까? 내가 병합 한 다음 모든 것을 수동으로 해결해야합니까? 병합 된 헤드의 로그에 커밋 메시지가 중복 될 수 있습니까? 이 두 가지가 체리에 의해서만 서로 동기화 될 운명인가? 서로의 커밋을 지금부터 선택하는 것일까 요?누군가 내 git 커밋에서 cherry-picked하고 자신의 커밋을했을 때 어떻게 병합합니까?

답변

3

스트레이트 병합이 작동해야합니다. 자식은 동일한 변경 집합을 알아야하며 A/A '또는 C/C'를 병합하지 않습니다. X, Y 또는 Z가 A '/ C'가 변경된 것과 동일한 코드를 터치 한 경우, 특히 B 또는 D가 동일한 코드를 터치 한 경우 충돌을 해결해야 할 수 있습니다.

항상 git merge --no-commit 일 수 있으며 예상 결과를 검사하여 예상 한 결과인지 확인할 수 있습니다.

1

충돌이없는 경우에는 직선 병합이 분명합니다. 그래도 충돌이있는 경우 ...

이 단계에서 충돌이 발생하면 처음부터 병합 할 수 있습니다. 중요하지 않거나 순서가 잘못 적용된 경우 자신의 변경 사항을 다시 적용하지 않아도됩니다. . C가 B에서 빌드되고 C '가 깨끗한 복사본이 아니거나 A에서 B가 빌드되면 A를 다시 적용하면 더 이상 명백한 작업 없음 등이 발생할 수 있습니다.

건너 뛸 수 있습니다 자세한 분쟁 조사 및 단지 수동 버전을 그대로 사용하거나 :

git merge --strategy=ours C'

그런 다음이 충돌에 더 많은 관심을 지불, 나머지를 병합합니다. 그의 X Y Z가 A B C D 항목을 실제로 만지지 않는다면, 이것은 충돌없이 진행되어야합니다. 그가 C를 C '와 합병하는 동안 뭔가 이상하거나 잘못한 것을 만들었고 C'를 병합 할 때 그것을 버린 경우, 그것은 되돌아 올 수 있고 여기 또는 나중에 언제든지 당신을 물릴 수 있습니다.