Git 커밋 수정하기 - Pro git 2판

Solar·2020년 2월 8일
0

버전관리시스템

목록 보기
4/4

Pro git 2판 의 내용에 따라 실습을 진행하였습니다.

마지막 커밋을 수정하기

1. 커밋 메시지만 수정

git commit --amend

위 명령을 입력하면 자동으로 텍스트 편집기를 실행시켜서 마지막 커밋 메시지를 열어준다. 편집기에서 메시지를 바꾸고 닫으면 바뀐 메시지로 마지막 커밋을 수정한다.

2. 커밋하고 난 후 새로 만든 파일이나 수정한 파일을 가장 최근 커밋에 반영

(1-1) 파일을 수정하고 Staging Area에 넣는다.

git add . //변경 사항이 있는 모든 추적파일을 stage에 올린다.
git add test.md //test.md파일을 stage에 올린다.

(1-2) 또는 추적하는 파일을 삭제

git rm test.md //test.md 파일을 삭제

(2) --amend 옵션을 주어서 커밋

git commit --amend

현 Staging Area의 내용을 이용해서 수정한다.


**※ 주의사항**

이 때 SHA-1 값이 바뀌기 때문에 과거의 커밋을 변경할 때 주의해야 한다.

Rebase와 같이 이미 Push한 커밋은 수정하면 안 된다.

커밋 메시지를 여러 개 수정하기

최근 커밋이 아니라 예전 커밋을 수정하려면 rebase 명령을 이용하여 수정할 수 있다.

현재 작업하는 브랜치에서 각 커밋을 하나하나 수정하는 것이 아니라 어느 시점부터 HEAD까지의 커밋을 한 번에 Rebase한다.

대화형 Rebase 도구를 사용하면 커밋을 처리할 때마다 잠시 멈춘다. 그러면 각 커밋의 메시지를 수정하거나 파일을 추가하고 변경하는 등의 일을 진행할 수 있다. git rebase 명령에 -i 옵션을 추가하면 대화형 모드로 Rebase할 수 있다. 어떤 시점부터 HEAD까지 Rebase할 것인지 인지로 넘기면 된다.

마지막 커밋 메시지 2개를 모두 수정하거나 그중 몇 개를 수정하는 예제를 살펴보자

현재 마지막 커밋 바로 이전의 커밋 메시지를 잘못 입력하였다. (스캐너 관련 리팩토링 작업내용인데 이전 커밋메시지와 동일하게 적음)

git rebase -i의 인자로 편집하려는 마지막 커밋의 부모를 넘겨준다. 형태는 HEAD~1^ 또는 HEAD~2 로 념겨줄 수 있다.

그렇지만, 실질적으로 가리키게 되는 것은 수정하려는 커밋의 부모인 세 번째 이전 커밋이다.

git rebase -i HEAD~2

실행하면 Git은 수정하려는 커밋 목록이 첨부된 스크립트를 텍스트 편집기로 열어준다.

이 커밋은 모두 log 명령과는 정반대의 순서로 나열된다. log 명령을 실행하면 아래와 같은 결과를 볼 수 있다.

git log --pretty=format:"%h %s" HEAD~2..HEAD

위 결과의 역순임을 기억!!

대화형 Rebase는 스크립트에 적혀 있는 순서대로 HEAD~2 부터 적용하기 시작하고 위에서 아래로 각각의 커밋을 순서대로 수정한다. 순서대로 적용하는 것이기 때문에 제일 위에 있는 것이 최신이 아니라 가장 오래된 것이다.

특정 커밋에서 실행을 멈추게 하려면 스크립트를 수정해야 한다. pick이라는 단어를 'edit'으로 수정하면 그 커밋에서 멈춘다.

수정하고자 하는 커밋을 'edit'으로 수정한다.

저장하고 편집기를 종료하면 Git은 목록에 있는 커밋중에서 edit 으로 변경한 커밋으로 이동하고, 아래와 같은 메시지를 보여주고, 명령 프롬프트를 보여준다.

명령 프롬프트가 나타날 때 Git은 Rebase 과정에서 현재 정확히 뭘 해야 하는지 메시지로 알려준다. 

소스트리로 확인해보면 HEAD가 분리되었다.

아래 명령을 실행하고 커밋 메시지를 수정한다.

git commit --amend

커밋 메시지 수정 완료 후, 텍스트 편집기를 종료하고 나서 아래 명령을 실행한다.

git rebase --continue

이렇게 커밋이 수정이 완료가 된다. 다른 커밋도 수정하려면 위 순서를 반복하면 된다. 다른 것도 pick을 edit으로 수정해서 이 작업을 몇 번이든 반복할 수 있다. 매번 Git이 멈출 때마다 커밋을 정정할 수 있고 완료할 때까지 계속할 수 있다.

[출처] Pro git 2판

profile
nunnu

0개의 댓글