본문 바로가기
Front-End/git

commit이 중복되어 push된 경우(hash value만 다르고 commit 메시지는 동일)

by kk님 2023. 9. 23.

똑같은 커밋이 중복으로 생긴 원인..이 뭘까?

일단.. 커밋 해시가 달랐다. 똑같은 메시지인데, 커밋 해시만 차이가 있다.

내 커밋 돌려줘~!

 

가설

1. push를 한 결과 원격에 이미 커밋 기록이 있는데, 내가 rebase를 해서 그런가? 

2. stash 해서..?

3. rebase를 하게되면 커밋 해시가 새로운 걸로 바뀐다고 알고있다.

 

일단 중복 커밋을 삭제하기 위해 reset --hard를 할 시간이다..

너무 무섭다.. 마음의 준비를 하자....

 

문제1

rebase를 하며 로컬에서 커밋이 합쳐져서, 커밋이 중복으로 생성됐다.(해시값만 다르고 커밋 메시지는 동일)

해결 방법:

그냥 이후에 생긴 커밋은 없애기 위해 원하는 commit으로 head를 돌린다.

git reset --hard [해시값]

그런데 rebase를 하면서 그래프가 이렇게 그려졌다.

가설 1. 아마 내가 origin/main 또는 main 둘중에 하나로 rebase를 하는 과정에서 발생한 것 같은데.. 뒷부분이 안보여서 어떤 브랜치인지 확인이 안되니, 추후 다시 실험해보려고 한다.

파랑색에 머지되는 예쁜 산봉우리같은 모습이어야 하는데, 자주색에 가지가 뻗어서 평행사변형(?)같은 모양이 되어버렸다..

PR을 하고 현재 브랜치랑 합치면 저 모양이 유지될 것 같아서, 다시 origin/main을 rebase를 했는데

 

git rebase origin/main 의 결과~

악! 또?

놀랐지만 침착하고

잘 읽어보면 자주색 가장 마지막 head가 'origin/브랜치명' 이다.

내가 이전에 push한 원격 브랜치의 커밋이 저렇게 해시가 바뀌면서 로컬에 리베이스 된 것.
따라서, push force를 하면 원격에 있는 나의 브랜치는 현재 내 로컬 브랜치와 맞춰지게 된다(는 것을 가정하고 push force를 진행했다)

 

그리고 자주색 왜 방향이 저렇게 되는거지? 생각해보면 ...

어라?왜지?

chheckout main한 뒤 rebase를 해서, 메인브랜치에서 병합된 것 같다.

 

그리고 현재 작업중인 브랜치에서 rebase origin/main을 한 뒤,

origin의 branch에 이미 push한 커밋이 중복되었는데, push force를 하면 origin branch도 local branch와 맞춰지게 된다.