저는 git
을 처음 사용하며 rebase를 이해하려고합니다. 나에게있어 병합 프로세스는 내 경험이 Clearcase
이므로 이해하기 쉽습니다.
우선 리베이스가 병합과 정확히 일치하는지 아닌지 이해할 수 없습니다. 그것이 같은 이유로 2 가지 절차가있는 이유입니까?
또한이 부분은 git-branching에서 읽습니다.
그것은 여기있다 :
동일한 작업을 rebase 및 병합합니까? 왜 한 가지를하는 두 가지 다른 절차가 있습니까?
를 그 다음은 말한다 :
그래서 나는이 명령은 서버와 클라이언트 지점 의 후 공통 조상이 공통의 조상을 제외한 모든 커밋을 의미 가정합니다. 그래서 우리는 다음 사진으로 끝납니다.$의 자식이, 이것은 기본적으로 말한다
는 "클라이언트 지점에서 을 확인 마스터 서버 클라이언트 --onto 리베이스 패치를 알아낼 클라이언트와 서버 브랜치의 상위 서버 인
의 조상을 검색 한 다음 master로 재생합니다. "약간 복잡합니다. 그림 3-32에 표시된 결과는 입니다.
는 그 다음 말한다 :
$ 자식 체크 아웃 마스터
$의 자식 클라이언트에게
당신이 당신의 마스터 분기 (그림 3-33)를 빠르게 전달할 수 있습니다
이 예제는 나에게 잘못되었습니다.
두 번째 그림에서 C8
과 C9
을 rebase
의 결과로 "이동"합니다. 그런 다음 병합합니다.
그러나 C8
은 master
브랜치에 C3
및 C3
코드가 없습니다.
C8
즉 이 master
앞에 있고 실제로 체인에 이전에 master
이 있지만 rebase
이후.
하지만 어떻게 작동합니까? C8
이 C3
에 종속 된 경우 C3
의 경우 은 branch
의 일부가 아니므로 이 실패합니다.
예. C3
에 클라이언트가 사용하는 일부 기능이있는 경우 main
지점에 존재하지 않습니다. 따라서 rebase
다음에 C8'
은 에없는 C3
에 정의 된 함수에 종속성을 갖습니다. 따라서 코드는 컴파일되지 않습니다.
아무도 rebase
워크 플로를 설명하는 데 도움이되고 git-scm
에있는 자습서의이 부분에 대해 내가 말한 것이 맞습니까?
모든 세부 정보를 읽지 않고 제목 질문에 대답하지 않고도 : 그들은 확실히 같은 것이 아닙니다. 'merge'는 0 또는 하나의 새로운 커밋을 생성합니다; 'rebase'는 지사의 역사를 다시 써서 많은 새로운 커밋을 만들 수 있습니다. – gcbenison
@gcbenison : 당신이 차이점으로 지적한 것은 프로 시저에 대한 * 동일한 * 기능을 구현하는 방법의 차이입니다. 같은 일을하는 데 왜 둘 다 필요합니까? 또한 나는 그것이 잘못되었다고 생각하는'scm'의 rebase에 대한 예제를 묻고 있습니다. – Cratylus
@Cratylus - 예제는 기술적으로 잘못이 아니며, 여러분도 마찬가지입니다. 'C3'는 명시된 두 커밋의 공통 조상 (예 : '오래된베이스')이기 때문에 (그림과 같이) 포함되지 않습니다. C3에 중요한 것이 있으면 문제가 될 수 있습니다. 즉 내가 건너 뛰는 것이 원치 않는 것을 알았을 때 이런 일을했습니다. 그러나 제 2 인자를 '오래된 기지'로 직접 사용하는 경향이 있습니다. 즉, 예제에 표시된 것을하고 싶다면'git rebase --onto master C3 클라이언트'를 사용하십시오. 'C3'을 포함 시키길 원한다면,'git rebase --onto master C2 클라이언트'를 할 것입니다. –