알고리즘을 풀다가 ..
이렇게 [BJ]로 작성해서 커밋을 했는데, 백준의 경우는 .. Backjoon Online Judge이기 때문에 .. BOJ로 커밋을 했어야 했다 ..
그래서 이미 커밋한 커밋 메시지를 수정하기로 했고 .. 다음과 같은 방법으로 수정하면 된다.
1. 터미널에서 rebase를 사용해서 수정 모드로 바꾼다.
이를 위해서는 rebase 명령어를 사용해야 하는데 rebase명령어는 branch의 base를 다시 설정하여 master브랜치와 merge commit생성을 방지하여 깔끔한 커밋을 남길 수 있도록 도와주는 명령어이다.
(rebase 명령어도 다양하게 쓰일 수 있기 때문에 여기서는 이정도만 알면 된다.)
git rebase HEAD~1 -i
rebase에서 -i 옵션을 주면 rebase명령을 대화형으로 수행하여 여러 커밋들의 순서를 바꾸거나 커밋 히스토리를 변경 또는 삭제할 때 사용한다.
이번에는 그냥 단순히 커밋 메시지만 변경시킬 목적으로 사용하는 것이다.
만약 HEAD~1이 아니라 HEAD~5 등의 명령어를 작성했다면, 입력한 숫자를 n이라고 했을 때, n개의 커밋 메시지만 불러온다는 것을 의미한다.
예를 들어서 HEAD~3 은 최근 커밋 메시지중 3개만 불러온다는 뜻이다. 만약 5개 이전의 커밋 메시지를 수정하고 싶으면 HEAD~5로 바꿔서 입력하는 식으로 사용하면 된다.
git rebase -i HEAD~5 명령어를 입력하면 다음과 같이 출력됩니다.
위의 형태를 보면,
pick | 커밋 번호 | 커밋 메시지
와 같은 형식으로 출력 되는 것을 볼 수 있다.
2. 수정하고 싶은 커밋 내역의 pick을 reword로 바꾼다.
이 중 수정하고 싶은 커밋은 [BJ]라고 커밋한 내역이다.
i를 눌러서 입력 모드로 바꾼 다음 > 이렇게 수정하고 싶은 커밋 내역의 pick을 reword로 바꾸고 > esc를 누르고 :wq 입력해서 터미널을 종료한다.
reword 명령어를 통해 수정할 커밋을 선택한다.
3. 커밋 메시지 수정한다.
위에서 종료를 하면, 커밋 메시지에 대한 화면이 아래와 같이 터미널에서 다시 호출된다.
이 때 2번과 마찬가지로 i를 눌러서 입력 모드로 전환한 다음, 변경할 메시지로 수정 후, esc를 누르고 :wq 를 작성해서 종료한다.
4. 원격에 push한다.
커밋이 이미 원격에 푸시 되었다면 커밋 메시지를 수정한 뒤에
git push --force 브랜치 이름
라고 작성하여 원격을 다시 덮어쓴다.
위의 이미지에서 알 수 있는 것처럼 만약 메인 브랜치의 경우라면
git push --force main 이 아니라 git push --force origin main으로 입력해야 한다는 것을 확인할 수 있다.
force 로 덮는 경우 강제로 덮어쓰기 방식을 사용하는 것이므로 권장하는 방법은 아니다.
왜냐하면 협업 중에 다른 사람이 강제로 바꿔놓은 branch를 pull 받았을 때, 커밋 메시지가 수정되어있으면 혼란을 야기할 수 있기 때문이다.
또 push 된 Commit의 로그를 갖고 있던 다른 팀원들이 일일이 수동으로 Commit 로그 메시지를 수정해야 할 수도 있다고 한다.
그래서 만약 force로 하게 된다면 팀원과 상의 후에 할 것을 권장한다!
(나처럼 개인 작업/개인 레포라면 크게 상관이 없겠지만 .. ?)
위의 과정을 잘 따라왔다면, 다시 깃헙으로 가보았을 때, 커밋 메시지가 수정된 것을 확인할 수 있다.
참고 블로그 :
https://jw910911.tistory.com/77
'Git' 카테고리의 다른 글
[Git] Rebase란? (0) | 2022.10.27 |
---|---|
[Git] 파일 생성, 수정, branch (2) | 2022.10.14 |
[Git] Reset (0) | 2022.10.04 |
[Git] Branch 이해하기 (0) | 2022.09.30 |
[Git] Git을 배워보자. (0) | 2022.09.30 |