[Git] commit 브랜치 옮기기

go_go_·2024년 2월 6일
0

Git

목록 보기
12/12
post-thumbnail

상황

commit을 작업 브랜치가 아닌, main 브랜치에 하고 있었다.
많은 commit을 작업 브랜치로 옮겨야 한다.

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의 커밋을 취소하기 위해 한 단계 더 진행해야한다.


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

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글