요약
오류 메시지
이전 커밋없이 '스쿼시'할 수 없습니다
"아래로 스쿼시"하려고 시도했을 가능성이 있습니다. Git은 항상 새로운 커밋을 이전 커밋 또는 이전에 커밋 된 대화 형 rebase 할 일 목록에서 볼 때 "위쪽으로" 스쿼시합니다 . 할 일 목록의 첫 번째 줄에서 명령을 변경하면 squash
첫 번째 커밋이 스쿼시되지 않기 때문에 항상이 오류가 발생합니다.
수정
먼저 시작한 곳으로 돌아갑니다.
$ git rebase --abort
당신의 역사가
$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 a
즉, a는 첫 번째 커밋이고 b, 마지막으로 c입니다. c를 커밋 한 후 b와 c를 함께 스쿼시하기로 결정합니다.
(참고 : 대부분의 플랫폼에서 기본적 git log
으로 실행 하면 출력이 호출기로 출력됩니다. 호출기 less
를 종료하고 명령 프롬프트로 돌아가려면 q
키를 누르십시오 .)
실행 git rebase --interactive HEAD~2
하면 편집기가 제공됩니다
pick b76d157 b
pick a931ac7 c
# Rebase df23917..a931ac7 onto df23917
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
(이 할 일 목록은의 출력과 비교할 때 반대 순서입니다 git log
.)
B의 변경 pick
하는 squash
당신이 본 오류가 발생하지만 B에 C 스쿼시 대신하면됩니다 (새가에 커밋 이전 또는 "위로 부수")에 할 일 목록을 변경하여
pick b76d157 b
squash a931ac7 c
편집기를 저장 중지하면 내용이 다른 편집기가 나타납니다.
# This is a combination of 2 commits.
# The first commit's message is:
b
# This is the 2nd commit message:
c
저장하고 종료하면 편집 된 파일의 내용이 결합 된 새 커밋의 커밋 메시지가됩니다.
$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
df239176e1a2ffac927d8b496ea00d5488481db5 a
기록 재 작성에 대한 참고 사항
대화식 리베이스가 기록을 다시 씁니다. 이전 기록이 포함 된 리모컨을 푸시하려고하면 빨리 감기되지 않으므로 실패합니다.
리베이스하는 브랜치 가 직접 작업 하는 토픽 또는 기능 브랜치 라면 별다른 문제가 없습니다. 다른 리포지토리로 푸시하려면 --force
옵션 이 필요 하거나 원격 리포지토리의 권한에 따라 먼저 이전 분기를 삭제 한 다음 리베이스 된 버전을 푸시 할 수 있습니다. 작업을 잠재적으로 파괴 할 수있는 명령의 예는이 답변의 범위를 벗어납니다.
당신이없이 다른 사람들과 작업하는 지점에 이미 게시 된 역사를 다시 쓰기 아주 같은 공동 작업자에 암호 나 기타 민감한 정보를 강제로 일을 누출로 좋은 이유와 것은 반사회적이고 다른 개발자를 성가 시게한다. 설명서의 "업스트림 리베이스에서 복구"섹션에git rebase
강조가 추가 되어 설명되어 있습니다.
다른 사람이 작업 한 브랜치를 리베이스 (또는 다른 형태의 재 작성)하는 것은 나쁜 생각입니다. 이 섹션에서는 다운 스트림 관점에서 수정을 수행하는 방법에 대해 설명합니다. 그러나 실제 수정은 처음부터 업스트림을 리베이스하지 않는 것입니다. …