[Git] 브랜치가 하늘로 승천했을 때
문제발생
결론은 이런 상태이다. 내가 무슨 짓을 한거지?
키워드조차 뭐라고 잡아야 될지 모르겠다. 드문 경우인 것 같아서 뭐라고 딱 정의내리기 어렵지만, 상황은 다음과 같이 조금 복잡하다.
한 팀원이 쏘아올린 실수
- 한 팀원이 프로젝트 최상위 폴더를 복사해서 하위 폴더에 넣어버렸다.
- 그 팀원은 해당 폴더를 완전히 없애는 것에는 실패했지만 내용물만 지운 채 머지했다.
- 결과적으로 팀원들은 다음처럼 프로젝트 폴더가 이중으로 겹쳐 있는 구조를 갖게 됐다. 화살표 표시가 들어간 폴더가 문제의 폴더이다.
화살표 모양으로 뜨는 폴더는 보통
.git
파일이 중첩되어 있을 때 참조할 수 없게 되는 경우라고 한다.
아~ 다운 선수가 그대로 토스받아서 브랜치를 쏘아올려버렸습니다! 🚀
- 나의 경우엔 해당 폴더에 .git 파일도 없는 완전히 빈 상태였기에 로컬에서도 접근할 수 없었고 해당 폴더의 존재가 심히 거슬렸다.
- 그래서 해당 폴더를 삭제하겠다고 이슈를 생성한 뒤 삭제해서 PR을 날렸다.
- 하지만 무슨 연유인지 머지 충돌이 일어났다.
- 일단 개발해야 될 부분이 많았기 때문에 우선순위가 낮다고 판단해서 PR을 삭제했다.
- 내 로컬에 해당 PR에 해당하는 커밋과 브랜치를 삭제하는 뒤처리를 진행하지 않은 채 잠들었다가 다른 작업들을 하고 push해버렸다. 불과 며칠 전에 PR 삭제 포스팅까지 써놓고…
- 이전 브랜치의 쓰레기들이 없어지지 않고 또 저장소에 올라가 충돌을 일으키게 되었다.
- 그래서 과거의 커밋을
git rebase
커맨드를 이용,drop
으로 삭제했다. (이 때 실수로git rebase HEAD~3 -i
으로 3개를 합쳐버리기도 했다) - 커밋을 삭제하자마자 적혈구 용혈하듯이 문제의 폴더 내부에 들어있던 것들로 추정되는 커밋들이 쏟아져나왔다. 제가 써놓고도 애매한 표현인데 이런 현상에 대해 조금이라도 아시는 분은 댓글로 알려주시면 감사하겠습니다.
- 브랜치가 승천했다.
비상대책회의
내가 실수한 쪽이라 나만 심각했고 딱히 비상 분위기는 아니었지만 내 심정은 참담했다.
- 내 브랜치에서만 일어난 일이어서 실제로 팀원들에게 영향이 가진 않았겠지만, 다른 팀원들이 커밋들이 딸려 올라온 것이 불안해서 혹시 몰라서 경과를 지켜봤다.
자수해야 되나? 몰래 없애고 넘어갈까? 에이 그래도 자수해야지…를 반복해서 고민하며 - 그렇게 기다리다가 새벽에 다른 팀원이 PR을 올리길래 바로 붙잡아서 간략히 상황을 설명
자수했다. 그러면서 충돌하는 부분이 있냐고 물어봤다. - 다행히 충돌하는 부분이 없음을 확인했는데 그 팀원은 다른 부분에서 오류가 났다길래 만에 하나를 위해 아침에 있을 회의에서 모두가 있을 때 다시 얘기해보기로 했다.
- 회의를 통해 그건 다른 문제였고, 다른 팀원들에게 영향이 없어보여서 내 브랜치만 없애고 수정하면 됨을 확인했다.
문제해결
- 혹시 모를 사고를 방지하기 위해 추가로 작성했던 코드들을 백업해뒀다.
- 저 파란색의 승천한 브랜치를 삭제했다.
- 브랜치의 뿌리(revert 사용한 곳)로 가서
abort
를 이용,revert
로 합쳤던 것을 다시 풀었다. - 해당 커밋의 직전 번호를 지정해서 문제의 커밋만 삭제했다.
- 다시 레포에서
pull
로 업데이트했다. - 백업해둔 코드를 덮어씌웠다.
- 커밋-푸시-PR 성공!
경과
꼬박 하루를 잡아먹었던 일인데 정리하니까 별것 아닌 것 같다.
그 뒤로 작성한 PR들이 잘 올라가고 깃 그래프도 예쁘게 그려지는걸 보면 문제는 잘 해결된 것으로 보인다.
이후 또 다른 팀원이 삭제하고 PR 올렸을 땐 오류가 나지 않아서 그 폴더는 무사히 삭제되는 것으로 해피엔딩이다.
Leave a comment