Git 커밋 조작하기, 히스토리 조작, 잔디밭 조작하기


1일 1커밋을 놓쳤을때 잔디밭이 비게 되는데 비어있는 잔디밭에 색깔을 칠해보자. 

비어있는 잔디는 git 커밋 히스토리의 날짜 조작을 통해 

과거의 커밋을 한 것처럼 조작 할 수 있다.  



1. 먼저 새로운 git-history를 조작할 테스트 repository를 만든다.





2. Git Bash를 열고 로컬 repository와 연결된 위치로 이동한다.






3. git log로 커밋한 내용을 확인한다.



1
git log
cs


commit 다음 나오는 문자열(7dc220b~로 시작하는) 해쉬값을 복사한다.






4. git commit 기록을 수정하는 첫번째 방법은 git 필터링을 활용하는 방법이다.





1
2
3
4
5
6
git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 복사한해쉬값 ]
     then
         export GIT_AUTHOR_DATE="Tue Aug 4 11:00:00 2020 +0900"
         export GIT_COMMITTER_DATE="Tue Aug 4 11:00:00 2020 +0900"
     fi'
cs


위에는 간단하게 지정한 해쉬값이 같을 경우 날짜를 바꾼다는 얘기다.

나는 8월 17일에 커밋과 푸시를 했지만 8월 4일에 커밋한 것으로 바꿀 것이다.


GIT_AUTHOR_DATE와 GIT_COMMITTER_DATE에 바꾸고 싶은 날짜를 수정한다.

(앞뒤 공백을 꼭 포함해야 한다.)



1
2
3
4
'변경 내용은 :wq로 저장한다.'
git pull origin master --allow-unrelated-histories
 
git push origin master
cs




push를 완료하면


github에 8월 4일에 조작된 날짜로 잔디밭이 표시된 것을 확인 할 수 있다.



다음은 git 필터링을 활용하는 방법이 아닌 git rebase를 활용하여 커밋을 조작해보자.



5. git rebase를 활용한 조작방법


일단 날짜 형식의 200805, 200806 md파일을 준비하고 1개씩 커밋 푸시 하였다. 

그리고 git log를 통해 조작할 커밋 해쉬값을 복사한다.



git log를 보면 모두 8월 17일에 커밋되었다는 것을 알려주고 있다.


git rebase -i [해쉬값] 를 입력한다.





수정할 해쉬값 앞에 edit를 넣는다.


edit [해쉬값] [커밋 메세지] 





1
2
3
4
5
6
7
8
9
git rebase -i 해쉬값
 
GIT_COMMITTER_DATE="Aug 6 11:00 2020 +0900" git commit --amend --date="Aug 6 11:00 2020 +0900"
 
git rebase --continue
 
git pull origin master --allow-unrelated-histories
 
git push origin master
cs




위와 같이 입력 후 girhub repository를 확인하면 

커밋날짜가 조작되어 잔디밭에 색깔이 칠해진 것을 확인 할 수 있다.



8월 17일에 커밋한 파일날짜를 8월 6일로 수정하여

커밋한 파일의 타이틀과 내용 날짜 모두 동일하게 커밋된 것을 확인 할 수 있었다.

git rebase를 활용하여 커밋조작이 가능했다.




git filtering을 사용하는 방법과 git rebase를 사용해 커밋날짜 조작을 해보았다.


해당 내용은 stackoverflow를 참고하여 작성했다.


(https://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git)


+ Recent posts