응? hotfix 후 머지 했는데 코드가 사라졌다고? (feat. revert)

skyepodium·2022년 3월 29일
0
post-thumbnail

반성문

1. 상황

그리 멀지 않은 옛날에 겪었던 일입니다.

상황은 이렇습니다.

    1. stg -> master 로 실수로 merge 됨
    1. 해당 merge revert함
    1. 그런데 그날 hotfix 해야한다고 해서 master에서 hotfix 브랜치 생성
    1. hotfix 후 master에 merge
    1. master develop으로 merge
    1. 코드 사라짐

뭔가 핫픽스도 잘 처리하고 오늘 정말 열심히 살았다. 좋았다 이런 생각 들었는데, develop 브랜치에서 코드가 사라졌다고 전화가 울렸습니다.

2. 해결에 사용한 방법

  • master -> develop 리버트
  • master -> develop hotfix 커밋내용 체리픽

(체리픽은 특정 커밋만 가져오는 기능입니다.)

3. 원인

코드가 사라진 이유는 revert 이력이 develep 브랜치로 들어갔고 코드를 지웠기 때문입니다.

지금 생각해보니, 과거의 일이 미래에 영향을 주는 타임 리프 영화 같습니다.

4. 복기 - 다른 방법을 찾아보자

1) git flow와 비교

git flow를 보면, 일단 master에서 생성한 hotfix 를 브랜치를 master와 develop에 각각 넣습니다.

그럼 나도 hotfix에서 바로 넣었으면 괜찮았을까? 그래도 지워졌을것 같다.

2) Reset을 사용한다면?

master 브랜치를 reset hard 한다?

브랜치 복사하고 잘 사용하면 될 것 같기는한데 가영이가 보였다.

3) Stackoverflow 찾아보니 비슷한 것 물어보는 분 계셨다.

Git flow - get rid of a particular feature

이분도 생각은 나랑 비슷하다 - revert이력 남아서 역머지 하면 코드 지워집니다. 그래서 체리픽으로 넣으세요

4) Revert 하지말고, 이력 잘 쌓자?

음 revert는 git의 기능이고 역머지할때 문제있다고 쓰지말라는 것은 아닌것 같다.

4. 처음부터 다시 생각해보자

문제는 특정 커밋 A가 revert된 것이다.

revert 된 A 커밋은 배포되면 안되는 내용이다. 따라서 지금은 master에는 merge할 수 없다.

그래서 생각한 방법은

  1. hotfix 브랜치에서 파생된 temp 브랜치를 생성한다.
  2. stg에서 temp로 넣어서 A 가 지워진 커밋을 다시 살린다. (conflict resolve)
  3. temp를 develop에 넣는다.

profile
callmeskye

0개의 댓글