git rebase -i로 커밋 시간 수정, 날짜 바꾸기 사용법

qb·2021년 6월 22일
2

git

목록 보기
1/1

커밋은 수정이 안될 것처럼 보이지만 다행히도 rebase -i로 수정이 가능합니다~

TIL(Today I Learned)을 실천했음에도 1일 1커밋을 미처 깜빡했을 경우에 유용할거라고 봅니다ㅎㅎ

보통 커밋(commit)의 날짜/시간을 수정하는 방법은 2가지가 있습니다.

  1. filter를 이용하는 방법 (여기선 다루지 않습니다)

2. git rebase -i를 이용하는 방법



git rebase -i를 이용하는 방법

git rebase -i (옵션, 인터렉티브)

주의점 :
1) 기본적으로 git rebase는 수정하고자 하는 커밋의 이전 커밋을 기준으로 rebase -i 명령을 실행 시켜야 합니다.
2) 항상 master 브렌치로부터 pull을 하여 최신상태에서 진행하도록 한다.
3) 커밋-푸쉬하지 않은 내용들이 있으면 이를 먼저 처리한 후 진행토록 한다.

1. 우선 git log 명령어로 수정하고자 하는 커밋의 해쉬값을 확인하도록 합니다.

깃헙에서 확인하는게 더 편할 수 있습니다.

2. 'git rebase -i 해쉬값' 명령어를 수행합니다.

3. 이제 변경하고자 하는 커밋의 내용을 edit으로 바꿔주시면 됩니다

(리눅스를 잘 모르시는 분들을 위해.. i를 눌러 입력모드로 바꿔주시고 pick→ edit로 수정!
ESC를 누르고 :wq(저장 후 종료) 로 빠져 나오시면 됩니다)

4. 이제 날짜 변경을 위한 내용을 입력하면 됩니다~

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

**ex)** GIT_COMMITTER_DATE="Jun 6 11:00 2021 +0900" git commit --amend --no-edit --date "Jun 6 11:00 2021 +0900"

5. 이후에는 git rebase --continue 명령어로 rebase를 진행하시면 됩니다.

rebase -i 를 수행하실 경우에,
충돌(conflict)없이 reabse --continue가 된다면 다행이지만 conflict가 발생하게 되면 충돌 부분을 먼저 해결하고 진행하셔야 합니다.

만약 쌓인 커밋이 많은 상태에서 rebase -i를 진행하신다면 충돌은 불가피할 수 있습니다. 즉 다른 커밋에서 충돌이 발생할 가능성이 매우 높습니다.

해결 :
1) 이때 코드에서 충돌을 수정을 하고
2) add 명령어만 수행한 뒤(index 트리에만 보낸 뒤) (단, 커밋은 하지 않습니다)
3) rebase --continue 명령어로 rebase를 계속 진행합니다.

만일 rebase 작업을 중지하고자 한다면 --abort옵션을 실행하면 됩니다.
git rebase --abort

git log로 우선 변경된 커밋을 확인한 결과 잘 변경 되었으니 push를 해주면 됩니다~

6. 마지막으로 변경 내용(rebase 결과)을 깃 허브에 push해주면 됩니다.

git push origin master

혹은 에러가 발생한다면 아래 명령어로 실행.
→ conflict가 발생하여 이를 해결한 경우라면 git에서 push를 거부 ⇒ -f 를 붙여 강제로 해결

git push -f origin master

remote 문제로 에러 발생 시 아래 명령어 고고

git push -f --set-upstream origin master
또는
git push -f -u origin master

https://wotres.tistory.com/entry/git-에러-해결법-git-push-setupstream-origin-master

이제 깃 허브에 가셔서 잔디를 확인해보시면 커밋이 옮겨진 것을 확인할 수 있습니다.


rebase는 다양한 기능을 가진 유용한 명령어입니다.
보통 깃 rebase는 커밋을 하나로 정리하여 마스터 브렌치에 푸쉬하는 용도로 많이 사용됩니다. 즉 협업 시에 커밋과 푸쉬 내용을 rebase로 깔끔하게 정리할 수 있습니다. 이 부분에 대한 내용은 따로 정리하겠습니다.

edit 외의 추가 명령어

압축 squash - 커밋 내역들을 압축하는 것. 여러 개의 커밋을 1개로 수정할 수 있다.
한데 묶고자 하는 커밋들 앞에 squash 또는 s로 바꿔주면 된다.
그럼 최 상단의 pick 커밋으로 전부 묶이게 된다.
삭제 drop - pick → drop 으로 바꾸고 rebase를 진행하게 되면 해당 커밋은 삭제 된다.

profile
q_________b

0개의 댓글