Git/GitHub Commit 수정하기 :: Author / Contributor 수정하기
잘못된 commit 메시지나 다른 사람 이름으로 올라간 commit 수정하기
공용 컴퓨터에서 작업을 하면 다른 사람의 이름으로 commit 되는 경우가 자주 발생합니다.
그럴 때는 git commit --amend
라는 명령어를 사용하시면 쉽게 되돌릴 수 있습니다.
위의 명령어를 어떻게 사용하는지 이번 포스트에서 설명하겠습니다.
방금 한 commit
의 메시지를 수정하고 싶은 경우
git commit --amend
아래의 상황에서 commit a786dd
의 메시지를 한번 수정해 봅시다.
1. git commit --amend
명령어를 칩니다. 그러면 수정할 텍스트가 열립니다. (저는 EDITOR 환경 변수가 vim이라서 vim으로 열립니다. - 참고)
2. 원했던 commit 메시지로 메시지를 수정합니다. 가장 최근의 commit 메시지를 "third commit"으로 바꿔보겠습니다.
3. 성공적으로 변경됐는지 확인합니다.
방금 한 commit
의 Author(Contributor)를 수정하고 싶은 경우
위 상황에서 IamGrooooooot <dury.ko@gmail.com>
을 IamGroot <groot@gmail.com>
으로 바꾸고 싶다면 어떻게 할까요? (참고로, 사용자명 <이메일> 형식입니다)
git commit --amend --author="새로운-사용자명 <새로운-이메일-주소>"
위의 명령어처럼 사용하시면 됩니다.
사용자명을 IamGroot
이메일 주소를 groot@gmail.com
으로 바꾸고 싶으면
git commit --amend --author="IamGroot <groot@gmail.com>"
이렇게 치시면 됩니다. 이렇게 치시면 vim창이 다시 열리는데요 commit 메시지를 그대로 두고 싶다면 바로 quit 하시면(:q) 됩니다.
사용자명이 잘 변경됐는지 확인해 봅시다.
예전에 한 commit
의 메시지를 수정하고 싶은 경우
범위 수정용으로
rebase
를 사용하면 편합니다.
가장 최근에 commit한 게 아니라 만약에 여러 개의 commit이나 예전의 commit을 수정하고 싶은 경우 HEAD(가장 최근에 한 commit)과 제가 수정할 commit 중 가장 오래된 commit이 있을 때까지 얼마나 차이가 나는지 카운트를 합니다. 만약 13개를 카운트한 경우 아래와 같이 씁니다.
git rebase -i HEAD~13
그리고 나면 vim창에 제가 수정하고 싶은 가장 오래된 commit부터 가장 최근에 commit(HEAD)까지 나열이 됩니다. 그다음 vim창에서 제가 수정하고 싶은 commit 앞에 적혀 있는 pick
을 edit
으로 수정해 주고 save and quit(:wq
)을 합니다.
(나머지는 그대로 나둬야 합니다!!)
pick
은 그 commit을 그대로 사용하겠다는 의미이고 edit
은 그 commit의 내용을 수정하겠다는 의미입니다.
이렇게 명령어를 치면 제가 edit
으로 수정한 commit에 해당되는 것들을 차례로 수정하게 됩니다.
1. 그다음은 위에서 설명한 amend
옵션을 사용하여 commit을 수정한 후 (새로운 author를 설정하는 경우)git commit --amend --author="새로운-사용자명 <새로운-이메일>
이후의 vim창에서 commit 메시지도 수정할 수 있습니다.
2. 아래의 명령어로 다음 commit으로 넘겨줍니다.git rebase --continue
1. 과 2. 를 rebase
가 끝났다고 뜰 때까지 반복해 줍니다.
rebase
가 끝났다고 뜨면 모두 수정했다는 겁니다. 끝입니다!
만약에 GitHub에 push
했던 commit
들을 수정하고 수정한 commit
들을 push
하고 싶으면 강제로 push
를 해야 됩니다. GitHub에 이미 올라간 commit
과 제 로컬의 commit
이 달라져서 충돌되기 때문이죠. 그래서 강제로 push
해서 덮어씌워줘야 합니다.
아래의 명령어는 로컬에 있는 Git 저장소를 강제로 GitHub에 push
해서 덮어씌우는 명령어입니다. 잘못하면 파일들을 다 날릴 수도 있기 때문에 꼭 Log를 확인한 후 제대로 변경이 됐는지 확인한 후 사용하세요!!
만약 혼자 작업하는 저장소가 아니라면 강제로 push
하는 것을 권하지 않습니다. 꼭 해야 한다면 내가 강제로 push
하는 순간부터 다른 사람들의 저장소가 GitHub의 저장소와 충돌하기 때문에 팀원들에게 모두에게 알리고 해야 합니다.
# [사용법]
git push -f <remote명> <branch명>
# [origin이라는 원격의 master 브랜치에 강제로 푸쉬하는 예시]
git push -f orgin master
댓글
이 글 공유하기
다른 글
-
Git의 파일 상태 구분법
Git의 파일 상태 구분법
2020.04.09 -
Git Internals 정리 :: Git은 어떻게 동작할까?
Git Internals 정리 :: Git은 어떻게 동작할까?
2020.03.16 -
.gitignore가 동작 안할 때 상황별로 해결하기
.gitignore가 동작 안할 때 상황별로 해결하기
2020.02.29 -
GitHub README.md 이미지가 갱신/업데이트 안 되는 경우 해결법
GitHub README.md 이미지가 갱신/업데이트 안 되는 경우 해결법
2020.02.20