본문 바로가기
TroubleShooting

[git] 원하는 커밋만 브랜치에 추가하려했으나 모든 커밋이 속하게 된 경우

by 랩린안 2022. 9. 30.

상황 :

npm run lint 실행시 error가 발생하는 파일들이 있어서 수정하기위해

main 브랜치에서 파생한 fix-lint-error 브랜치에서 두 개의 커밋을 하고 pull request를 요청했다.

 

기대한 바는 두 개의 커밋 내역을 가진 pr이었으나,

기존 main 브랜치의 첫 번째 커밋부터 fix-lint-error에서 작업한 두 개의 커밋까지

모조리 commit 내역에 나타나게 되었다.

 

심지어 잠깐 테스트를 하고 삭제한 브랜치까지 전부 따라왔다.

원인은 git과 branch에 대해 제대로 알지 못하던 탓에 브랜치를 오고가며 커밋을 생성한 탓이었다.

 

해결하기 위해 git cherry-pick을 사용했다. 새로운 브랜치 lint-error 를 만든 뒤

git cherry-pick 으로 원하는 두 개의 commit을 선택해서 새로운 브랜치로 가져왔다.

 

하지만 결과는 똑같았고, 결국 윤석님께 도움을 청했다.

git checkout lint-error

// Switched to branch 'lint-error'

우선 전체 커밋내역이 옮겨진 lint-error 브랜치에서 시작한다

git log --graph

git log를 graph로 봐서 현재 상태를 확인한다.

git fetch upstream main

upstream의 main을 가져온다.

git rebase --abort

rebase 전으로 되돌린다.

git reset --hard upstream/main
//HEAD is now at 423aa9c Merge pull request #78 from Jongveloper/migrationNext

현재 작업 위치인 HEAD의 포인터를 특정 위치로 upstream의 main으로 변경한다.

git cherry-pick 원하는 커밋
git push origin lint-error -f

lint-error 브랜치에 강제로 push한다.

위 과정을 거치니 원하는 대로 lint-error 브랜치에 두 개의 커밋만 남았다.

 

참고문서:

Git - git Documentation