commit을 작업 브랜치가 아닌, main 브랜치에 하고 있었다.
많은 commit을 작업 브랜치로 옮겨야 한다.
1. main에서 커밋 기록 확인하기
git reflog
0bc7315 (HEAD -> main) HEAD@{0}: commit: ADD: manager 폴더, base.py 생성 #1
4182546 HEAD@{1}: commit: ADD: connector 폴더, base.py 생성 #1
18e550d HEAD@{2}: commit (amend): feat: init 기본 return 값 작성 #1
573717f HEAD@{3}: commit: feat: init 기본 return 값 작성 #1
5263ed6 (origin/main, feat/#1) HEAD@{4}: commit: MOD: .gitignore
d96b6d3 HEAD@{5}: commit (initial): ADD: Create Project
2. 작업 브랜치로 이동
git checkout feat/#1
3. 작업 브랜치로 커밋 옮기기
# 한 개 이동
git cherry-pick commit_hash
# 여러 개 이동
git cherry-pick commit_hash1 commit_hash2 commit_hash3
# 구간 이동
# 과거커밋^..최근커밋
# 꼭 ^.. 형태로 작성해야 함
git cherry-pick commit_hash1^..commit_hash5
예시
git cherry-pick 573717f^..0bc7315
log를 보면, 작업 브랜치에 commit 옮겨진 것을 볼 수 있다.
이대로 마무리하면, main의 log 기록은 그대로 유지된다.
main의 커밋을 취소하기 위해 한 단계 더 진행해야한다.
1. 안전한 방법
커밋 기록은 유지하되, 이전 버전으로 돌아가는 방법이다.
먼저 main 브랜치로 이동한다.
git checkout main
revert 명령어를 통해 없애고 싶은 커밋 기록 범위를 입력한다.
git revert -n 573717f^..0bc731
새로운 커밋을 작성하면 커밋 기록은 남지만 이전 버전으로 돌아간다.
2. 커밋 기록 완전히 삭제하고 싶은 경우
reset 명령어를 입력하면 된다.
git reset --soft 돌아가고싶은_commit_hash
reset은 돌아가고 싶은 commit 위치로 HEAD를 옮기며, 3가지 옵션이 있다.
--soft
: 변경 사항 유지, staged 상태--mixed
: 변경 사항 유지, unstaged 상태--hard
: 변경 사항 삭제참고
https://hayeon1549.tistory.com/13
https://hayeon1549.tistory.com/13