git rebase -i <branch> 사용 시, 주의사항
힌트: 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가
힌트: 거부되었습니다. 푸시하기 전에 ('git pull ...' 등 명령으로) 리모트
힌트: 변경 사항을 포함하십시오.
힌트: 자세한 정보는 'git push --help'의 "Note about fast-forwards' 부분을
힌트: 참고하십시오.
현재 브랜치의 끝이 리모드 브랜치보다 뒤에 있으므로 업데이트가 거부되었습니다. 를 본 적 있는 사람?
난 부트캠프에서 rebase 사용 후 리모트 브랜치에 푸쉬할 때, 이런 에러가 뜨면 force push 하라고 배웠다.
근데 이건 정답이 아니다. 실수 했을 때, 사용하는 방법이라고 해야 맞다.
1. 당신은 어떤 작업을 했고, 리모트 브랜치에 push를 했다.
2. 그러나 당신은 다른 수정할 사항이 떠올랐고, 수정을 마친 다음, rebase 명령어를 사용하고 squash 옵션을 사용해서 리모트에 올라간 커밋에게 squash를 시도했다.
3. 에러가 발생했다.
이미 리모트에 올라가버린 feat: 수정 작업1에 squash를 사용했기 때문이다.
즉 이렇게 사용하면 문제가 없다.
무슨 말인지 이해가 안가는 사람? 실습을 따라해보자.
옳은 방법과 틀린 방법의 튜토리얼을 준비했다.
공통
1. github의 레포를 하나 판다.
2. 새로운 폴더를 생성해서 연결한다.
3. 리드미.md를 준비한다.
4. 브랜치를 하나 만들고 체크아웃 한다.
5. 비슷한 작업을 했다는 표시를 한 커밋을 3개 생성한다.
6. 다른 작업을 했다는 표시를 한 커밋을 1개 생성한다.
7. rebase를 한다.
비슷한 작업 3개를 하나로 합치고, 다른 작업 하나를 남겨둔다.
8. 리모트 브랜치에 푸쉬한다.
옳은 방법
1. 수정 했다는 표시를 한 커밋을 1개 생성하고 푸쉬한다.
2. 에러가 발생했는가?
발생하지 않았다.
틀린 방법
1. 수정 했다는 표시를 한 커밋을 1개 생성하고 리모트에 푸쉬한다.
2. 다시한번 수정했다는 표시를 한 커밋을 1개 생성한다.
3. rebase를 한다. 이때, squash 옵션을 사용해서 수정했다는 커밋을 하나로 합친다.
4. 리모트 브랜치에 푸쉬한다.
5. 에러가 발생했는가?
<후기>
키야... 회사에서 아무도 force push를 안해서 식은땀 흘렸다.
회사에서는 아무도 squash 옵션을 쓰지 않는다. 그래서 같은 문제를 만나지 않은 것이다.
해당 문제에 대해 코드 리뷰 시간에 공유해봤지만, 아무도 반응이 ㅠㅠ 아쉽지만 어쩔 수 없다.