사실 자주 쓰면 안되는 건데, 쓰고 싶을 때가 있다(...)
출처는 http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git
git filter-branch -f --env-filter \
'if [ $GIT_COMMIT = 해쉬값 ]
then
export GIT_AUTHOR_DATE="Mon May 1 08:45 2017 +0900"
export GIT_COMMITTER_DATE="Mon May 1 08:45 2017 +0900"
fi'
이렇게 변경하면 되는데,
filter-branch 가 해당 브랜치의 모든 history를 뒤지기 때문에, 브랜치의 history가 길 경우에는 굉장히 오래 걸린다.
커밋 하나 시간 변경하는데 꽤 오래 걸려서 섬짓 할 수 있다.
-f 를 해주는 이유는 ref 를 변경하게 되는데, ref 에 대해서는...
이걸 참고하도록 하자. 자세히 적자니 귀찮다(...)
어쨌든, 여러 개의 커밋을 변경할 때는 ref 가 임시로 저장되는데, 한 커밋을 변경하면 이 임시로 ref 가 저장된다.
그 후에 다른 커밋을 변경하면 이 ref 가 레알 ref가 아니라 임시 ref 라는 메시지를 뱉으며 변경 실패한다.
뭐, 보통 ref 까지 뒤지면서 엄청 git을 깊게 쓰는 경우는 없으니 (그리고 있어서도 안되니) -f를 걸어줘도
내 실험 내에서는 괜찮았다(...)
다만, 브랜치에 여러 개의 커밋이 있을 때, 마지막 커밋이 아니라 중간에 있는 커밋의 시간을 변경하면
변경한 커밋 이후의 커밋들의 해쉬값이 모두 바뀐다(!)
이건 주의해야할 듯.
참고로
GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend
이런 방법도 있는데,
이건 커밋 자체의 시간을 변경하는게 아니라 변경된 시간으로 새로운 커밋을 생성하는 거라서
이 편이 안전할 듯.
하지만 역시 중간에 있는 커밋을 바꾸고 싶을 때가 있으니(...)
하지 말아야 하지만 쓸 때는 주의주의주의.....
'Tech Note' 카테고리의 다른 글
글로벌 비디오 서비스가 가능하게 한 넷플릭스의 Microservice 아키텍쳐 구조 분석 (1) | 2021.01.24 |
---|---|
Consistent Hashing 일관된 해싱 (0) | 2020.12.27 |
HTTP/2 HTTP/3 의 차이점 (0) | 2019.09.10 |
Group by 에 대해서 (0) | 2019.05.05 |
Spring 4.x 에서 HttpServletRequest 의 params 를 변경하고 싶을 때 (0) | 2017.08.03 |