회사 깃 정책
(실제 회사 용어랑 아래 기술된 용어는 약간 다름)
DEV : 개발 서버에 올라가있는 소스 (특별히 정책 없음)
STG : 스테이징 서버에 올라가있는 소스 (Release 브랜치를 통한 머지만 허용)
PRD : 운영 서버에 올라가있는 소스 (Release 브랜치를 통한 머지만 허용)
Release : PRD에서 생성된 브랜치 (feature 브랜치를 통한 머지만 허용)
feature : Release에서 생성된 브랜치, feature 브랜치 하나 당 기능 한 개를 담당
문제점
깃 원복을 허용하지 않습니다. (정책상)
왜냐하면 PRD, STG, Release는 머지를 통한 소스 변경만 허용되기 때문입니다
git reset이나 git revert를 직접할 수 없습니다
해결책[수정 2023-03-26]
처음에 다른 방법으로 했었는데 생각해보니
feature 브랜치에서는 git reset이나 git revert가 가능합니다
따라서 feature 브랜치에서 git revert를 해준 뒤에 릴리즈 브랜치에 머지하면 됩니다
git checkout feature/R
git log --oneline (또는 빗버킷 Commits 확인)
# commit id 확인
git revert [commit id]
# 커밋 여러개를 원복하려면
# git revert [commit id1] [commit id2] ....
git push --set-upstream origin feature/R
# 푸시할때 리모트 저장소 (origin)의 feature/R 브랜치로 설정
# 이후 빗버킷에서 release브랜치와 merge
git reset과 달리 git revert는 해당 커밋시점으로 돌아가겠다는 의미가 아니라
해당 커밋만 되돌리겠다는 의미입니다 (+새로운 commit history 추가)
예를들어
A->B->C->D
라는 commit history가 있을 때
git reset B 를 하면 브랜치는
A->B
와 같은 상태가 됩니다
하지만 git revert B를 하면
A->B->C->D->E
라는 E라는 새로운 커밋 기록이 생기며
E 브랜치의 파일 상태는 B 커밋기록이 삭제된
A->C->D
와 파일 상태가 동일합니다
revert할 때 B까지 되돌리고 싶으면
git revert D C
를 하면 됩니다
이 때 커밋기록은
A->B->C->D->D_revert->C_revert
와 같이 됩니다
해결책[삭제]
참고 삼아 기록은 남겨 두겠습니다
dummy 브랜치를 생성해서 수기로 소스간 싱크를 맞춥니다

1. dummy 브랜치 생성
git checkout PRD
git log (또는 빗버킷 Commits 확인)
# commit id 확인
git reset [commit id]
git checkout -b dummy # local에 브랜치 생성
2. 수기로 dummy 브랜치 - feature/A 브랜치 소스 동기화
git checkout feature/A
git checkout dummy -- .
# dummy에 있는 모든 파일을 feature/A으로 가져옵니다
# 만약 PRD2에서 PRD1에 없던 파일을 생성했다면
# checkout을 통해 해당 파일이 삭제되는 것은 아니므로 아래 명령어로 삭제해주어야 합니다
git diff dummy --name-only
git rm [바뀐 파일 명]
git commit -m [메시지]
git push
참고로 feature/A 브랜치에서 dummy 브랜치를 pull 하는 것은 pull이 merge와 같은 효과이기 때문에 의미가 없습니다
이후, PRD까지 머지하면 됩니다
'개발업무 > 개발' 카테고리의 다른 글
Nginx reverse proxy 설치 및 구성 (0) | 2023.11.18 |
---|---|
[Git] pull request view - diff (0) | 2023.11.15 |
[MySQL] Three-valued logic: exists / not exists / in / not in (0) | 2023.08.16 |
Express.js timeout 체크리스트 (0) | 2023.05.29 |
PostMessage 사용하기 (0) | 2023.04.13 |