2014-05-20 2 views
2

나는 전에 CVS를 사용해 왔기 때문에 자식을 배우고있다 ... 누군가가 이것에 대해 배울 수있는 힌트를 가지고 있다면, 여기에 상황이있다.git rebase -i, clean commit

버그 수정을위한 분기를 만들었습니다 (bug435). 나는 4 개의 커밋을 한 다음 github (우리는 중앙 리포지토리에 사용)로 푸시했다. 나는 PR을 보았고 (여전히 PR 과정을 배우고있다.), 생성 된 diff가 매우 난잡하다는 것을 알았다. 그리고 리뷰어는 줄을 서서히 따라 가야했다. (이 경우 하나의 새로운 기능을 만들어서, 나는 비틀었다. 여러 커밋 이상). 나는 하나의 추가 기능처럼 보이기를 원하며, 전체 기능은 하나의 기능으로 제공됩니다.

그래서 'git rebase -i HEAD ~ 4'(4 개의 커밋이 있음)를 시도하고 스쿼시에 커밋을 지정했습니다. 저것은 작동하는 것처럼 보였고 나의 로컬 저장소의 'git log'가 수정되었습니다. 그러나 원격 저장소 (github 자체)에서 변경 기록에 내 rebase가 반영되지 않았습니다. 그래서 나는 'git push'를 할 필요가 있다고 생각했다. 'git push'는 나에게 'git pull'이 필요하다는 메시지를주었습니다. 하지만 - 이것은 병합을 만들어 내게 놀랐습니다.

병합에 대해 궁금한 점이 있다면, 나는 'git push'를 계속 진행했습니다. 나는 github에서 bug345의 브랜치 히스토리를 확인했는데 모든 것이 멋지게 보였다. 나는 위대한 소식이라고 생각했었다. 나는 새로운 PR을 만들었지 만 원래의 커밋, 병합 커밋, 그리고 내 리베이스의 두 가지 커밋을 포함했습니다. 그것은 3 추가 커밋을 생성 :) 아니 내가 무엇을 기대하고 있었다.

내 생각에 나는 리베이스를 할 수 있다고 믿었습니다. 기본적으로 지점 HEAD 포인터를 첫 번째 변경 지점으로 변경하고 변경 사항을 한 커밋 (변경 기록)에 적용한 다음이 분기를 원격 repo는 리베이스 된 변경 사항 만 반영합니다. 하지만 내가 예상하지 못했던 것은 병합 (추가 커밋)이 있었고 원격 Repo 지점이 여전히 내 오래된 커밋을 "기억"했다는 것입니다.

장면 아래에서 일어나는 일에 대한 조언이나 힌트가 있습니까? :)

고마워요!

답변

2

자신의 기록 만 다시 쓰고 있습니다. 원격 기록은 다릅니다.

git pull은 원격 변경 사항을 가져 와서 정의에 따라 병합을 시도합니다.

예를 들어 -f (강제) 옵션을 사용하여 기록을 잊어 버리거나 다시 쓰기를 허용하도록 원격 저장소를 가져와야합니다. 또는 이전 PR을 삭제하고 적절한 기록으로 새 PR을 만드십시오.

+0

Fluxman에게 감사드립니다. 이것은 도움이되었다. – user3277939