2017-11-18 19 views
1

로컬 브랜치 A에 다음 커밋이 있다고 가정하고 원격 브랜치로 푸시합니다.master 브랜치에서 다른 커밋을 가져온 후 Git 스쿼시가 커밋 됨

commit 1 
commit 2 
commit 3 
commit 4 

지금, 나는 리모트 마스터에서 당겨, 그리고 역사는 다음과 같다 커밋 -

//From branch A 
commit 1 
commit 2 
commit 3 
commit 4 
//From master 
commit 5 
commit 6 

지금 스쿼시 2, 3 자식은 -i와 자식 푸시을 리베이스 사용하여 범 원하는 경우 - f, 커밋 5와 6도 재 작성됩니까? 그렇다면 마스터 브랜치에서 가져온 커밋을 다시 작성하지 않고 이전 커밋을 스쿼시 할 수있는 방법이 있습니까? 나는 힘내 미끼이기 때문에, 아주 기본적인 것을 놓치고 싶다면 나를 용서해주십시오.

답변

2

기능 분기에 있고 마스터에 리베이스하는 경우 Rebase는 해당 커밋을 다시 쓰지 않습니다. rebase 범위가 커밋 5와 6에서 실행되면 복사되고 수정되지만 아무 것도 잃지는 않습니다. 이는 정상적인 동작이며, git은 커밋을 변경하지 않으며, 새로운 커밋은 필요한 변경으로 생성됩니다. git rebase -i master을 실행하는 동안 지형 지사 내부에서 지사 지점의 고유 한 커밋을 복사 한 다음 지사 지점의 업데이트 된 버전에 다시 적용합니다.

커밋 6이 HEAD라고 가정하면 커밋 5와 6은 기본적으로 제거되고 분기 기준이 업데이트되면 커밋 1로 다시 나타납니다. 그런 다음 커밋 1-4가 사용자의 지침에 따라 재생됩니다. 5 < - - 4 <-1 ', 커밋 6 <이 : 그러나, 하나는 당신의 머리이었다 커밋 경우

, git rebase -i master는 새로운 역사의 결과로, 커밋 1-4을 취소하고 스쿼시 명령으로 그들을 재생합니다 2 명과 3 명이 부숴지고 5 명과 6 명이 영향을받지 않습니다.

리베이스에 대한 자세한 내용과 더 자세한 설명은 here에서 확인할 수 있습니다. 당신은 당신이 (더 REBASE 충돌이 없습니다 경우) 변경되지 않습니다 커밋 56의 다음 내용을 제안 무엇을 할 경우 부모가 변화하기 때문에

+0

감사합니다. 당신의 대답의 두 번째 부분에서, 나는 당신이 "4가 당신의 머리 였으면 ..."(즉, 커밋 5와 6이 아직 주인에게서 풀리지 않았다는 뜻)이라고 가정하고 있습니다. – ankit0311

+0

수 있습니다. 나는 당신이 두 번째 예에서 시작한다고 가정했습니다. "자, 나는 원격 마스터로부터 당깁니다". 아름다운 부분은 솔루션이 동일한 방식으로 작동한다는 것입니다. – Blue

0

그러나 자신의 해시는 다를 것이다. 따라서 더 이상 56은 커밋되지 않지만 동일한 내용의 커밋은 다릅니다. 강제 푸시는 괜찮습니다. 다른 사람이 원격 브랜치를 사용하고 있지 않다면, remote에서 이미 가져온 항목을 다시 작성하십시오. 나는 개인적으로 remote/master에 그것을하지 않을 것이다.

관련 문제