[Git] 브랜치가 하늘로 승천했을 때

문제발생

결론은 이런 상태이다. 내가 무슨 짓을 한거지?

image

키워드조차 뭐라고 잡아야 될지 모르겠다. 드문 경우인 것 같아서 뭐라고 딱 정의내리기 어렵지만, 상황은 다음과 같이 조금 복잡하다.

한 팀원이 쏘아올린 실수

  1. 한 팀원이 프로젝트 최상위 폴더를 복사해서 하위 폴더에 넣어버렸다.
  2. 그 팀원은 해당 폴더를 완전히 없애는 것에는 실패했지만 내용물만 지운 채 머지했다.
  3. 결과적으로 팀원들은 다음처럼 프로젝트 폴더가 이중으로 겹쳐 있는 구조를 갖게 됐다. 화살표 표시가 들어간 폴더가 문제의 폴더이다.

화살표 모양으로 뜨는 폴더는 보통 .git 파일이 중첩되어 있을 때 참조할 수 없게 되는 경우라고 한다.

image

아~ 다운 선수가 그대로 토스받아서 브랜치를 쏘아올려버렸습니다! 🚀

  1. 나의 경우엔 해당 폴더에 .git 파일도 없는 완전히 빈 상태였기에 로컬에서도 접근할 수 없었고 해당 폴더의 존재가 심히 거슬렸다.
  2. 그래서 해당 폴더를 삭제하겠다고 이슈를 생성한 뒤 삭제해서 PR을 날렸다.
  3. 하지만 무슨 연유인지 머지 충돌이 일어났다.
  4. 일단 개발해야 될 부분이 많았기 때문에 우선순위가 낮다고 판단해서 PR을 삭제했다.
  5. 내 로컬에 해당 PR에 해당하는 커밋과 브랜치를 삭제하는 뒤처리를 진행하지 않은 채 잠들었다가 다른 작업들을 하고 push해버렸다. 불과 며칠 전에 PR 삭제 포스팅까지 써놓고…
  6. 이전 브랜치의 쓰레기들이 없어지지 않고 또 저장소에 올라가 충돌을 일으키게 되었다.
  7. 그래서 과거의 커밋을 git rebase커맨드를 이용, drop으로 삭제했다. (이 때 실수로 git rebase HEAD~3 -i으로 3개를 합쳐버리기도 했다)
  8. 커밋을 삭제하자마자 적혈구 용혈하듯이 문제의 폴더 내부에 들어있던 것들로 추정되는 커밋들이 쏟아져나왔다. 제가 써놓고도 애매한 표현인데 이런 현상에 대해 조금이라도 아시는 분은 댓글로 알려주시면 감사하겠습니다.
  9. 브랜치가 승천했다.

비상대책회의

내가 실수한 쪽이라 나만 심각했고 딱히 비상 분위기는 아니었지만 내 심정은 참담했다.

  1. 내 브랜치에서만 일어난 일이어서 실제로 팀원들에게 영향이 가진 않았겠지만, 다른 팀원들이 커밋들이 딸려 올라온 것이 불안해서 혹시 몰라서 경과를 지켜봤다. 자수해야 되나? 몰래 없애고 넘어갈까? 에이 그래도 자수해야지…를 반복해서 고민하며
  2. 그렇게 기다리다가 새벽에 다른 팀원이 PR을 올리길래 바로 붙잡아서 간략히 상황을 설명자수했다. 그러면서 충돌하는 부분이 있냐고 물어봤다.
  3. 다행히 충돌하는 부분이 없음을 확인했는데 그 팀원은 다른 부분에서 오류가 났다길래 만에 하나를 위해 아침에 있을 회의에서 모두가 있을 때 다시 얘기해보기로 했다.
  4. 회의를 통해 그건 다른 문제였고, 다른 팀원들에게 영향이 없어보여서 내 브랜치만 없애고 수정하면 됨을 확인했다.

문제해결

  1. 혹시 모를 사고를 방지하기 위해 추가로 작성했던 코드들을 백업해뒀다.
  2. 저 파란색의 승천한 브랜치를 삭제했다.
  3. 브랜치의 뿌리(revert 사용한 곳)로 가서 abort를 이용, revert로 합쳤던 것을 다시 풀었다.
  4. 해당 커밋의 직전 번호를 지정해서 문제의 커밋만 삭제했다.
  5. 다시 레포에서 pull로 업데이트했다.
  6. 백업해둔 코드를 덮어씌웠다.
  7. 커밋-푸시-PR 성공!

경과

꼬박 하루를 잡아먹었던 일인데 정리하니까 별것 아닌 것 같다.

그 뒤로 작성한 PR들이 잘 올라가고 깃 그래프도 예쁘게 그려지는걸 보면 문제는 잘 해결된 것으로 보인다.

이후 또 다른 팀원이 삭제하고 PR 올렸을 땐 오류가 나지 않아서 그 폴더는 무사히 삭제되는 것으로 해피엔딩이다.

Categories:

Updated:

Leave a comment