본문 바로가기

개발

깃 망한 커밋 없애기 ^*^ git reset upstream main to specific commit

사이드 프로젝트 하다가 무지성 커밋 & PR 한 목록들이 있었는데... 

깔끔히 나 그런 거 안한 척 ^^ 해보기로 했다

사이드 프로젝트 A -> upstream

fork 한 me/A -> origin

얘를 pc에 클론받음 -> local

 

로컬에서 main 브랜치로 이동

git switch main

아직 upstream이 연결이 안 되어있다면 연결해준다
git remote add upstream 깃주소

git fetch upstream
git pull upstream main

main으로부터 새 브랜치를 만들어 준다
git checkout -b 새브랜치 main

소스를 수정하고 커밋 메시지를 컨벤션에 맞게 예쁘게 적어준다

git commit -m "커밋메시지"

git push origin 새브랜치

 

다시 메인으로 이동

git switch main

그 다음에 upstream main 에서 되돌리길 원하는 커밋 시점을 찾아 커밋 id를 복사한다

** 주의 여기서는 함부로 따라하지 말고 각 명령어가 어떤 걸 뜻하는지 확인 또 확인 후 따라하세요 ** 

git reset --hard 커밋ID

이러면 로컬의 main에서 해당 시점 이후의 커밋들이 없어진다

git push --force origin main
내가 포크받은 깃허브 me/A 에서 해당 시점 이후의 커밋이 없어진다

git push --force upstream main
upstream main에서 해당 시점 이후의 커밋이 없어진다 ** 주의 ! **

이게 바로 안 될 수 있는데, 

레파지토리 설정에서 branch -> force push 권한이 체크가 되어 있어야 한다

작업 때만 잠시 풀어주고 다시 권한을 빼자!

 

위 명령어까지 하면 upstream 레파지토리에서 원하는 시점 이후의 커밋이 싹 사라진 걸 볼 수 있다

우리는 아까 커밋을 새로 하고
git push origin 새브랜치 를 해주었기 때문에

새로 pr을 컨벤션에 맞춰서 하면 예쁘게 main의 커밋 이력을 관리할 수 있다 ^^~