TIL(Today I Learned)을 실천했음에도 1일 1커밋을 미처 깜빡했을 경우에 유용할거라고 봅니다ㅎㅎ
보통 커밋(commit)의 날짜/시간을 수정하는 방법은 2가지가 있습니다.
- filter를 이용하는 방법 (여기선 다루지 않습니다)
2. git rebase -i를 이용하는 방법
git rebase -i
(옵션, 인터렉티브)
주의점 :
1) 기본적으로 git rebase는 수정하고자 하는 커밋의 이전 커밋을 기준으로 rebase -i 명령을 실행 시켜야 합니다.
2) 항상 master 브렌치로부터 pull을 하여 최신상태에서 진행하도록 한다.
3) 커밋-푸쉬하지 않은 내용들이 있으면 이를 먼저 처리한 후 진행토록 한다.
깃헙에서 확인하는게 더 편할 수 있습니다.
git rebase -i 해쉬값
' 명령어를 수행합니다.(리눅스를 잘 모르시는 분들을 위해.. i
를 눌러 입력모드로 바꿔주시고 pick→ edit로 수정!
ESC를 누르고 :wq
(저장 후 종료) 로 빠져 나오시면 됩니다)
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"
rebase -i 를 수행하실 경우에,
충돌(conflict)없이reabse --continue
가 된다면 다행이지만 conflict가 발생하게 되면 충돌 부분을 먼저 해결하고 진행하셔야 합니다.
만약 쌓인 커밋이 많은 상태에서 rebase -i를 진행하신다면 충돌은 불가피할 수 있습니다. 즉 다른 커밋에서 충돌이 발생할 가능성이 매우 높습니다.
해결 :
1) 이때 코드에서 충돌을 수정을 하고
2) add 명령어만 수행한 뒤(index 트리에만 보낸 뒤) (단, 커밋은 하지 않습니다)
3) rebase --continue 명령어로 rebase를 계속 진행합니다.
만일 rebase 작업을 중지하고자 한다면 --abort옵션을 실행하면 됩니다.
git rebase --abort
git log로 우선 변경된 커밋을 확인한 결과 잘 변경 되었으니 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로 깔끔하게 정리할 수 있습니다. 이 부분에 대한 내용은 따로 정리하겠습니다.
압축 squash - 커밋 내역들을 압축하는 것. 여러 개의 커밋을 1개로 수정할 수 있다.
한데 묶고자 하는 커밋들 앞에 squash 또는 s로 바꿔주면 된다.
그럼 최 상단의 pick 커밋으로 전부 묶이게 된다.
삭제 drop - pick → drop 으로 바꾸고 rebase를 진행하게 되면 해당 커밋은 삭제 된다.