코딩스토리

Git 이전 Commit 수정하기 (이미 PR 보낸 과거 commit 수정하기) 본문

기타 이슈

Git 이전 Commit 수정하기 (이미 PR 보낸 과거 commit 수정하기)

kimtaehyun98 2021. 10. 12. 00:32

현재 2021 OSS 컨트리뷰톤을 진행 중인데 이미 PR을 보낸 commit의 indentation에 문제가 있음을 확인했다.

 

 

가독성도 굉장히 떨어지고 기분도 찝찝하기에 저 indentation 오류를 해결해야겠다고 마음먹었지만...

Git린이에게 큰 시련이 닥쳤다..

 

바로 해당 PR에 commit이 쌓여버렸다는 점!

indentation 오류를 고쳐야 하는 commit이 가장 옛날 commit이었다 ㅠㅠ

 

이러한 경우 commit을 고치는 방법이 있다!

지금부터 이 과정을 기록해놓으려고한다. (맨날 까먹거든요)

 

간단하게 과정먼저 설명해보면 다음과 같다.

 

  1. 과거의 commit으로 돌아간다.
  2. commit을 수정한다.
  3. 다시 원래 시점으로 돌아온다.

 

말은 간단하지만 처음 해보면 쉽지는 않다..

지금부터 차근차근 해보자.

 

1. 과거의 Commit으로 돌아가기

$ git rebase -i HEAD~3

위의 명령어는 "현재 시점으로부터 이전 3개의 commit을 확인하고 과거로 돌아갈 거야!"라는 뜻이다.

제일 초기의 시점부터 보고 싶다면 --root를 사용하면 된다.

 

해당 명령어를 실행하면 아래와 같은 화면이 나온다.

여기서 pick이 3개가 보이는데 잘 읽어보면 3개의 commit임을 확인할 수 있다.

 

이제 내가 변경하고 싶은 commit을 선택해야 한다.

 

해당 화면은 현재 vi 편집기 상태이므로 조작을 잘해야 한다. (안 그러면... )

 

먼저 i를 눌러 편집 상태로 변환 뒤 변경을 원하는 commit을 edit으로 바꾼다.

이때 INSERT가 떠야지 편집 상태인 것이다.

 

이렇게 edit으로 바꾼 뒤 ESC를 누른 뒤 :wq를 입력하여 빠져나온다.

 

위와 같이 뜨면 과거의 commit으로 돌아간 상태이다. (궁금하다면 git log를 통해 확인해보길)

 

2. Commit 수정

 

이제 내가 변경하고 싶었던 부분들을 변경하자.

(이때 보면 알겠지만 실제로 과거 코드로 돌아가 있음)

 

열심히 고치는 중

 

자 이제 다 고쳤다면 git status와 git diff를 통해 확인한다.

 

변경된 것을 확인했으면 아래와 같은 과정을 수행하면 된다.

 

$ git add .
$ git commit --amend

 

변경 사항을 Staging Area에 올리고 commit을 하는데 이때 --amend 옵션은 이전 commit을 현재 commit으로 덮어쓰겠다는 의미이다.

 

해당 명령어를 시행하면 아래와 같이 뜬다.

만약 commit massage를 변경하고 싶다면 위에서 vi 편집기 사용하듯이 하면 된다.

 

그렇지 않다면 :wq를 통해 빠져나온다.

 

 

그럼 성공적으로 commit이 실행되었다.

 

3. 다시 원래 시점으로 돌아오기

 

이제 다시 원래대로 돌아와야겠죠? 과거에 머물 순 없잖아요?

 

현재로 돌아오는 명령어는 아래와 같다.

 

$ git rebase --continue

성공적으로 현재로 돌아왔다!

 

단순히 commit을 고치는 거면 여기까지만 따라와도 성공이다.

 

만약 나처럼 PR을 고치는 거라면 아래의 과정을 통해 PR을 변경시키면 된다.

(아 물론 고친 commit을 github repo에 push 하고 싶어도 아래의 과정을 시행하면 된다)

 

$ git push -f origin branch명

 

branch명에는 말 그대로 내가 push 할 branch 이름을 쓰면 된다.

 

그러면 짜잔~!

 

 

꼴 보기 싫었던 Indentation 오류들이 쫘악 사라지고 새로운 commit으로 덮어졌다.

 

이렇게 이미 보낸 PR에 쌓인 과거 commit을 수정하는 방법을 알아보았다.

 

이걸 처음 배울 때만 해도 절대 쓸 일이 없겠구나 했는데 결국엔 쓰게 되었다..

역시 세상일 모른다니까😁

 

 

Comments