2013-05-23 2 views
3

저는 git을 처음 사용하며 rebase를 이해하려고합니다. 나에게있어 병합 프로세스는 내 경험이 Clearcase이므로 이해하기 쉽습니다.
우선 리베이스가 병합과 정확히 일치하는지 아닌지 이해할 수 없습니다. 그것이 같은 이유로 2 가지 절차가있는 이유입니까?
또한이 부분은 git-branching에서 읽습니다.
그것은 여기있다 :
enter image description here동일한 작업을 rebase 및 병합합니까? 왜 한 가지를하는 두 가지 다른 절차가 있습니까?

를 그 다음은 말한다 :

$의 자식이, 이것은 기본적으로 말한다
는 "클라이언트 지점에서 을 확인 마스터 서버 클라이언트 --onto 리베이스 패치를 알아낼 클라이언트와 서버 브랜치의 상위 서버 인
의 조상을 검색 한 다음 master로 재생합니다. "약간 복잡합니다. 그림 3-32에 표시된 결과는 입니다.

그래서 나는이 명령은 서버와 클라이언트 지점 후 공통 조상이 공통의 조상을 제외한 모든 커밋을 의미 가정합니다. 그래서 우리는 다음 사진으로 끝납니다.

enter image description here

는 그 다음 말한다 :
$ 자식 체크 아웃 마스터
$의 자식 클라이언트에게

를 병합 :

이제

당신이 당신의 마스터 분기 (그림 3-33)를 빠르게 전달할 수 있습니다

enter image description here

이 예제는 나에게 잘못되었습니다.
두 번째 그림에서 C8C9rebase의 결과로 "이동"합니다. 그런 다음 병합합니다.
그러나 C8master 브랜치에 C3C3 코드가 없습니다.
C8 즉 이 master 앞에 있고 실제로 체인에 이전에 master이 있지만 rebase 이후.
하지만 어떻게 작동합니까? C8C3에 종속 된 경우 C3의 경우 은 branch의 일부가 아니므로 이 실패합니다.
예. C3에 클라이언트가 사용하는 일부 기능이있는 경우 main 지점에 존재하지 않습니다. 따라서 rebase 다음에 C8'은 에없는 C3에 정의 된 함수에 종속성을 갖습니다. 따라서 코드는 컴파일되지 않습니다.
아무도 rebase 워크 플로를 설명하는 데 도움이되고 git-scm에있는 자습서의이 부분에 대해 내가 말한 것이 맞습니까?

+0

모든 세부 정보를 읽지 않고 제목 질문에 대답하지 않고도 : 그들은 확실히 같은 것이 아닙니다. 'merge'는 0 또는 하나의 새로운 커밋을 생성합니다; 'rebase'는 지사의 역사를 다시 써서 많은 새로운 커밋을 만들 수 있습니다. – gcbenison

+0

@gcbenison : 당신이 차이점으로 지적한 것은 프로 시저에 대한 * 동일한 * 기능을 구현하는 방법의 차이입니다. 같은 일을하는 데 왜 둘 다 필요합니까? 또한 나는 그것이 잘못되었다고 생각하는'scm'의 rebase에 대한 예제를 묻고 있습니다. – Cratylus

+0

@Cratylus - 예제는 기술적으로 잘못이 아니며, 여러분도 마찬가지입니다. 'C3'는 명시된 두 커밋의 공통 조상 (예 : '오래된베이스')이기 때문에 (그림과 같이) 포함되지 않습니다. C3에 중요한 것이 있으면 문제가 될 수 있습니다. 즉 내가 건너 뛰는 것이 원치 않는 것을 알았을 때 이런 일을했습니다. 그러나 제 2 인자를 '오래된 기지'로 직접 사용하는 경향이 있습니다. 즉, 예제에 표시된 것을하고 싶다면'git rebase --onto master C3 클라이언트'를 사용하십시오. 'C3'을 포함 시키길 원한다면,'git rebase --onto master C2 클라이언트'를 할 것입니다. –

답변

1

아니요 동일한 것이 아닙니다. rebase는 재배치 한 브랜치 뒤에 리베이스 된 브랜치를 커밋합니다.

기본 병합은 병합의 새로운 커밋 결과를 생성합니다.

병합이 명백 할 때 리베이스가 너무 많은 병렬 분기를 피할 수 있다고 말할 수 있습니다. 그러나 병합이 복잡한 경우 (같은 파일 등을 작업하는 경우) 병합이 좋습니다.

같은 자식 차이점을 재 계산, remerging 때 때문이다 A = B +

병합 거라고하는 C = B + DIFF에 c은 diff = A + C REBASE이다 CBIS = A + DIFF CBIS

와 DIFF C는 아마 읽기 쉬운, DIFF cplus가 복잡해질 수있다

도은 diff 간단한 경우 (REBASE 같은) 라인에 병합하려고 빨리 감기 옵션이며, 생성 병합하지 않는 경우. 이것은 아마도 초보자에게 적합 할 것입니다.

+0

고마워, 철자법 때문에 나의 영어는별로 좋지 않다. – dzada