power-girl0-0

[GIT] Git Commit의 날짜 변경 및 커미터(Committer) 변경하기 본문

개발

[GIT] Git Commit의 날짜 변경 및 커미터(Committer) 변경하기

power-girl0-0 2021. 2. 17. 22:25
728x90

 

해당 게시물은 나동빈 님의 'Git으로 시작하는 협업 및 오픈소스 프로젝트'강의를 바탕으로 작성된 것입니다.

스스로 공부한 것을 정리하고 복습하기 위한 목적으로 작성하였습니다.


기본적으로 깃(Git)은 특정한 프로젝트의 소스코드가 언제 변경되었는지 등을 감지하여 이력을 알려준다는 특징이 있다.

따라서 우리가 소스코드를 변경해서 커밋을 진행하면 진행된 시점을 기억하여, 깃 사용자에게 알려준다.

 

해당 글에서는 깃의 커밋 날짜 또한 변경하는 방법에 대해서 알아보자.


 ① git rebase를 이용하는 방법 

해당 실습을 위해서, 아래와 같이 하나의 깃 프로젝트를 준비하였다.

이제 수정을 위해서 'git rebase 명령어'를 이용해보자.

본 글에서는 Add test2의 커밋을 변경하는 실습을 진행하였다.


-i옵션을 이용하여, 변경하고자 하는 commit의 이전 해시값을 입력해주면 특정 commit을 지정할 수 있다.

즉, 아래와 같이 입력하면 된다.

  git rebase -i {commit 해시 값} 

위 명령어 실행시, 아래와 같이 출력되는 것을 확인할 수 있다.

여기서 맨 윗줄인 Add test2를 변경해야 하므로, pick을 edit으로 아래와 같이 바꿔준다.


이제 해당 commit의 날짜를 변경해보자.

위와 같이 설정 후, 변경하고자하는 설정의 명령어를 입력해주면 된다.

 

본 글에서는 2018년 10월 1일 10시로 변경해보았다.

   GIT_COMMITTER_DATE="{날짜}" git commit --amend --no-edit --date "{날짜}"

위와 같이 git log를 통해 확인해보면, 날짜가 변경된 것을 확인할 수 있다.


결과적으로 변경 내역을 적용하고자 할 때는 아래 명령어를 이용하면 된다.

  git rebase --continue


 ② 필터링을 이용하는 방법 

깃에서는 필터링 기능을 지원하고 있는데, 해당 기능을 이용하면 모든 커밋의 내역들을 다 하나씩 살펴보면서 필터링을 수행한다는 특징이 있다.

그렇기 때문에, 프로젝트의 규모가 커질수록 오랜 시간이 걸리 수 있는 단점을 가지고 있다.

 

해당 명령어는 git filter branch를 이용하며, f옵션을 붙여서 무조건 필터가 실행되도록 할 수 있다.


필터링을 수행할 때는 어떻게 필터링을 수행할지 내용을 적을 수 있는데, if문을 사용하여 실습해보자.

위에서 실습한 커밋 중 "Udate test1"을 대상으로 실습을 진행하였다.

git filter-branch -f --env-filter \
    'if [ $GIT_COMMIT = {Commit 해시 값} ]
     then
         export GIT_AUTHOR_DATE="Oct 1 10:00 2018 +0000"
         export GIT_COMMITTER_DATE="Oct 1 10:00 2018 +0000"
     fi'

해당 명령어는 if문을 통해 수정하고자 하는 commit을 지정하였으며, fi를 통해서 if문이 종료되었음을 나타냈다.

 

여기에서 주의할 점은, 위 소스코드에서 if문 안에 들어가는 내용에서 공백에 유의해야 한다.

공백을 지워버리면 제대로 동작하지 않는 문제점이 발생한다.


적용 이후에 git log를 확인해보면 아래와 같이 변경되어 있는 것을 확인할 수 있다.

그와 더불어 변경된 커밋 이후의 커밋들의 해시 값까지 모두 변경되어 있는 것을 알 수 있다.


 커밋을 한 사용자를 바꾸는 방법 

마찬가지로 git filter branch를 사용하면, 성공적으로 변경이 가능하다.

 

아래와 같이, 사용자가 test로 변경된 것을 확인할 수 있다.


실제로 git push로 올린 후 github에서 확인하면, 변경내용으로 올라가는 것을 확인할 수 있다.

 

 

 

 

728x90
Comments