본문 바로가기

개발/이게 왜 안돼?

[Github] 깃허브 커밋 날짜를 조작하고 싶지 않으신가요?

아직까지 Repository를 삭제하면 연관된 날짜의 잔디들이 다 사라진다는 것을 몰라서

새해 새 마음으로 시작된 1월 1일 커밋이 날아가버리는 불상사가 발생했습니다.

 

그러나 걱정마세요 여러분도 저와 같이, rebase를 통해 날짜를 조작하여 사라진 잔디를 다시 찾을 수 있습니다!  (그렇지만 악용은 안되겠죠)

 

단계 1. git log

저의 깃허브 저장소에 있는 파일들 중 만만한 repo를 골라서 터미널에서 열어줍니다.

터미널에서 

git log

를 입력하면 해당 폴더의 깃로그들을 확인할 수 있습니다.

분홍색 박스 안에 있는 문자열이 각 커밋의 Hash Value 입니다.

해당 상태를 종료하려면 터미널에   q  를 입력하면 됩니다.

단계 2.  git rebase -i {Hash Value}

이제 수정하고 싶은 날짜 이전의 커밋을 하나 골라 줍니다. 그러고 해당 Hash Value를 이용하여 다음과 같은 명령어를 입력합니다.

git rebase -i {hash value}
실제 입력 : git rebase -i 83f94b07a663bcaf5ddd355f92830fe4d9

입력을 하게 되면 터미널에 다음과 같이 뜹니다.

그러면 키보드에서  를 입력하면 insert 모드로 바뀌게 되고, 키보드를 움직여 해당 위치로 간 후 제일 첫 번째 깃로그의 pick을 edit으로 바꿔 줍니다.

변경한 후에  esc -> wq!  순서대로 키보드에서 입력하여 수정을 종료합니다.

단계 3. Git commit amend

그 후 터미널에 다음과 같이 입력해 줍니다. 이때 원하는 날짜로 수정 가능합니다.

git commit --amend --no-edit --date="{원하는 날짜}"
실제 입력 : git commit --amend --no-edit --date="JAN 01 11:00:00 2022 +0000"

저는 2022년 1월 1일 오전 11시로 수정했습니다.

단계 4. Git rebase --continue

해당 날짜로 수정 완료 후, rebase를 계속 진행해줍니다.

git rebase --continue

그러면 이제 터미널에서 리베이스가 완료됐다는 내용을 확인할 수 있습니다

단계 5. Git push -f origin main

아직 끝이 아닙니다. 단계 4까지 하고 자꾸 깃허브 데스크톱에서 메인이랑 동기화하라 해서 했다가 저는 단계 1~단계 4까지 4번 넘게 반복했습니다 -_-; 수정한 리베이스 내용을 main에 강제로 push 해주는 과정이 필요합니다.

git push -f origin main

해당 단계까지 하고 나면 이제 모든 수정한 내용이 main에 적용되었습니다. 이제 깃허브에 들어가서 채워진 잔디를 확인하는 일만 남았습니다!

단계 6. 잔디 확인하기

짜잔. 이렇게 저는 사라진 1월 1일의 잔디도 채웠습니다.

아직 깃허브터미널 사용과, 깃허브 자체에 대해서 모르는 게 많다는 것을 느꼈습니다.