안경잡이개발자

  기본적으로 깃(Git)특정한 프로젝트의 소스코드가 언제 변경되었는지 등을 감지하여 이력을 알려준다는 특징이 있습니다. 우리가 소스코드를 변경해서 커밋(Commit)을 진행하면 그 커밋이 진행된 시점을 기억하여, 깃 사용자에게 알려줍니다.

 

  일반적으로 깃의 커밋 날짜는 변경하기 어렵다거나 변경하지 못하는 것으로 알고 있는 사람들이 많습니다. 하지만 실제로는 깃의 커밋 날짜 또한 변경이 가능합니다.

 

  그래서 흔히 말하는 깃 허브 잔디밭의 '1일 1커밋'도 어렵지 않게 조작하여 달성할 수 있습니다.

 

  저는 실습을 위해서 다음과 같이 하나의 깃 프로젝트를 준비해보았습니다.

 

 

① 필터링을 이용하는 방법

 

  이 방법은 깃(Git)의 필터링 기능을 이용하는 방법입니다. 다만 모든 커밋 내역을 살펴보며 필터링을 수행한다는 점에서, 프로젝트의 규모가 클수록 오랜 시간이 걸릴 수 있습니다.

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

  

  또한 여기에서 주의할 점은, 위 소스코드에서 if문 안에 들어가는 내용에서 공백에 유의하셔야 한다는 것입니다. 공백을 지워버리면 제대로 동작하지 않을 수 있습니다.

 

 

  적용 이후에 실제로 깃 로그(Log)를 확인해보시면 다음과 같이 변경되어 있는 것을 확인할 수 있습니다. 그와 더불어 변경된 커밋 이후의 커밋들의 해시 값까지 모두 변경되어 있는 것을 확인할 수 있습니다.

 

 

② git rebase를 이용하는 방법

 

  우리는 git rebase를 이용해서도 특정한 커밋의 날짜를 변경할 수 있습니다.

git rebase {commit 해시 값} -i

 

  기본적으로 rebase 명령어를 이용할 때는 변경하고자 하는 커밋의 이전 커밋을 기준으로 하여 -i 옵션(인터렉티브)으로 에디터 창을 열어주시면 됩니다.

 

 

  이후에 변경하고자 하는 커밋의 선택 내용을 edit으로 적용하시면 됩니다.

 

 

  이후에 다음의 명령어로 커밋 내역의 날짜를 변경하시면 됩니다.

 

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

 

  저는 다음과 같이 2019년 1월 1일의 날짜로 커밋 내역을 변경했습니다.

 

 

  결과적으로 변경 내역을 적용하고자 할 때는 git rebase --continue를 입력하시면 됩니다.

 

변경된 내용을 깃 허브에 푸시하면 어떻게 될까?

 

  실제로 변경된 내용을 깃 허브(Git Hub)에 푸시하면 어떻게 될 지 확인해봅시다.

 

 

  재미있게도, 잔디밭에도 해당 변경된 커밋의 날짜에 맞게 색깔이 칠해져 있는 것을 확인할 수 있습니다.

 

 

Comment +0