git commit 후 author, email을 수정하는 방법

git 을 여러 PC 에서 사용하다보면 자칫하면 유저 네임(user.name) 이나 이메일을 의도와는 다르게 하여 commit & push 를 진행 할 수가 있다. 예를 들면 개인 노트북과 회사에서 업무로 사용하는 노트북이 있는데, 회사 노트북에는 회사에서 사용하는 유저네임이나 이메일 주소를 git 에 설정하였지만 개인 노트북에는 개인 계정의 유저네임이나 이메일 주소를 설정해놓은 상태에서 간혹 개인 노트북으로 회사 업무를 처리할때 이미 설정된 개인 유저네임과 이메일로 commit & push  가 되는 경우다. 

이때 회사의 git 레파지토리에 회사에서 사용하는 공식 유저 네임과 이메일 계정이 아닌 개인 유저 네임과 이메일 주소가 표기되어 있다면 난감한 상황에 빠진다. 뭐 개인 유저 네임이나 이메일 계정이 회사에 공개되어야 상관없다면야 문제가 없겠지만, 개인 성향상 회사에 공개하고 싶지 않다면 이미 처리해 버린 commit 과 push 를 되돌리고 싶을 것이다. 

이럴 때 commit 된 작업의 유저네임과 이메일 주소를 어떻게 바꿀까? 얼마전에 경험했던 상황을 바탕으로 commit 된 작업의 유저네임과 이메일 주소를 바꾸는 방법에 대하여 알아보기로 하자.

현재 설정된 git user.name 과 git user.email 확인하기

현재 PC나 서버의 계정에 설정된 git user.name 과 git user.email 을 확인하려면 아래 명령어를 통해 확인할 수 있다.

위에서는 두가지 형태로 표시하였는데, 첫번째는 clone 한 디렉토리별로 유저네임과 이메일을 확인할 때 쓰는 것이고 두번째는 전체 계정의 유저네임과 이메일을 확인하는 것이다. git 은 각 브렌치 별로 유저네임과 이메일 주소를 각각 설정이 가능하다. 따라서 전체 계정의 유저네임과 이메일을 설정했더라도 특정 디렉토리에 clone 한 git branch에는 별도로 유저네임과 이메일 주소가 설정이 가능한 것이다. 

그래서 작업시 한개의 계정에서 commit & push 를 할때 유저네임이나 이메일주소를 각각 다르게 하려면 작업 디렉토리별 브렌치마다 각각 유저네임과 이메일 주소를 설정해주면 된다. 

git user.name 과 git user.email 을 의도와 다르게 설정하고 나서 commit & push 했을때 변경법

그럼 의도치 않게 git의 유저네임과 이메일을 다르게 설정한뒤 commit 과 push 를 처리했다면 이를 바꿀 방법은 있을까? 당연히 가능하다. 

먼저 상황을 한번 보자. 

위 git log를 보면 맨 아래 commit 의 author 와 이메일은 각각 codedosa, dosacode@gmail.com 이지만 그 다음 commit의 경우에는 author 는 haha 이고 이메일은 test@codedosa.com 이다.  각 commit 마다 author 와 이메일 주소가 다른 것을 알 수 있다. 하지만 실제로 commit 은 같은 사람인 내가 한 것이고 단지 유저네임(author)와 이메일만 각각 다르게 설정하여 commit 처리를 한 것이다. 위 commit 들은 현재 레파지토리에 push 처리까지 되어 있다. 

여기서 author 가 “haha” 인 커밋의 author 와 이메일 주소를 바꿔서 레파지토리에 push 까지 해보도록 하자. 

“git rebase” 명령을 이용하여 바꿀 커밋을 선택하여 실행한다. 커밋은 마지막 “HEAD” 를 기준으로 선택하면 되는데 여기서 바꿀 커밋은 HEAD 이다. 만약 바꿀 커밋이 HEAD를 기준으로 한단계 아래 있다면 “HEAD~1” 이 된다. 

위 명령어를 입력하면 다음과 같이 edit 창이 뜬다. 여기서 e 를 입력한다음 수정할려는 commit ID 를 입력하고 :wq 를 해서 저장하고 빠져나온다.

저장하고 빠져나갔으면 다음과 같은 화면이 나타난다.

메시지를 보니 conflict 가 난다고 한다 이때 “git rebase –continue” 를 한번 해준다. 

위와 같이 나온다면 git rebase 상태로 전환이 완료된 것이다. 다음에는 아래와 같이 git commit 명령어와 –amend 옵션을 통해 변경할 author 와 email 주소를 입력해 준다. vi 에디터가 나타나는데 :wq를 눌러서 저장하고 빠져나가면 아래와 같이 메시지가 나타난다.

위와 같이 메시지가 나오면 HEAD 커밋의 author와 email 주소가 좀전에 입력한 정보로 바뀌어 있을 것이다. 현재는 HEAD 의 작업용 branch 만 변경이 되어 있을 것이다. 이걸 원격 레파지토리에 push 를 해주면 된다. 

git push 에서 -f 옵션을 줘서 강제로 push 를 해준다. 그럼 원격 레파지토리에도 변경한 author와 email 주소가 업데이트 되어 있을 것이다. 

확인해 보니 마지막 커밋이 바꾸려고 했던 author 와 email 로 업데이트 되어 있음을 알 수 있다.

error: Content is protected !!