git flow 전략 / 에러 / git - command

Debug-Life ·2023년 9월 15일
1
post-thumbnail

포스팅 목적

입사한 이후 버전관리 때문에 애를 먹었다. 그래서 버전관리도 이번기회에 뿌리를 뽑기로했다.
깃 커맨드도 외우고 브랜치 분기해서 삭제해보고 로컬에만 브랜치 삭제했을때 문제점. 그리고 origin에 올라간 커밋들을 revert 하고서 새로운 분기 땄을때 경우 등등 여러 경우를 만나서 문제를 해결했던 기록을 여기에 남긴다.

  • 이제는 소스트리와 같은 GUI로 관리하지 않고 vscode에서 깃 명령어를 포함해서 하나로 관리하기로 했다.

문제상황

사내 규칙에 맞춰서 git flow 전략을 따르기로 했다. 기본적으로 브랜치의 종류는 3개였다.

  1. master
  2. develop
  3. feature

Master : 최종 실서버 브랜치,
develop : 각 프론트, 백엔드쪽에서 쓰는 main 브랜치(여기서 master로 병합하고, feature로 분기한다)
feature : 기능별로 구분해둔 브랜치. develop에서 분기한 이후 작업이 끝나면 develop으로 병합한다.

기본적으로 이런 구조로 버전관리를 진행한다. 하지만 처음에 피쳐브랜치를 따는걸 깜빡하고 바로 master 브랜치에 작업하고 커밋을 해둔 상태였다. 다행히 revert 로 작업을 되돌렸다. 그런데 develop브랜치도 사실상 제대로 쓰지 않는 상태였다, git flow 전략을 고수하지 않은채 master 에서 바로바로 실서버로 반영해오셨기 때문이었다. 그래서 이번 기회에 다같이 제대로 된 git flow 전략을 하기로 했던 터라 시행착오가 있었다.


해결 과정

  1. master origin에 올라간 커밋 내용을 revert 한다.
  2. 최종 실서버에 origin 브랜치에서 강제로 develop 브랜치에 병합을 진행한다.
  3. 이 develop 브랜치에서 새롭게 피쳐브랜치를 분기한다.
  4. 피쳐브랜치에서 기능작업이 완료되면 피쳐오리진에 올리고 local develop에 병합후 origin develop 으로 까지 작업
  5. develop 브랜치에서 master 브랜치로 merge request 진행.

추가 문제상황

1번 해결과정을 진행 한 후에 팀장님이 실서버에 바로 푸쉬되는 문제를 방지하기 위해 팀장 계정만 실서버에 push를 할 수 있게 설정해두셨다. 그러니 내 로컬환경에서 master 브랜치를 revert 하더라도 오리진에 올릴 수 없었다.

해결

결국 revert 하기 이전의 커밋으로 reset -hard 를 진행했다. 따라서 내가 진행했던 master 브랜치의 커밋들은 전부 날라갔고, 작업하기 이전의 커밋에서 분기한 브랜치들의 작업들만 남게 됐다.

사실상 master 브랜치에서의 커밋은 4개였다. 기능작업 2개, revert 2개
이 4개의 커밋만 사라졌다.


Git 기본 명령어

브랜치 삭제 과정

git checkout [삭제할 브랜치 이외에 다른브랜치이름]
git push origin --delete [삭제할 브랜치] (원격)
git branch -D [삭제할 브랜치] (로컬)

현재 상태 확인 (내가 제일 많이 사용하는 명령어)
git status

전체 로그 확인
git log

git 저장소 생성하기
git init

저장소 복제 및 다운로드
git clone [https: ]

저장소에 코드 추가
git add
git add *

커밋에 파일의 변경 사항을 한번에 모두 포함
git add -A

커밋 생성
git commit -m "message"

변경 사항 원격 서버 업로드 (push)
git push origin master

원격 저장소의 변경 내용을 현재 디렉토리로 가져오기 (pull)
git pull

변경 내용을 merge 하기 전에 바뀐 내용 비교
git diff [브랜치 이름][다른 브랜치 이름]

Git Branch 관련 (생성, 브랜치 확인, push 까지의 과정 포함)

git init을 설정하면 해당 폴더에 .git 이라는 파일이 생성됨
git init

브랜치 생성
git branch [브랜치명]

해당 브랜치로 이동
git checkout [브랜치명]

브랜치를 생성하고 해당 브랜치로 바로 이동
git checkout -b [브랜치명]


원하는 브랜치로 이동했는지 확인
git branch

모든 브랜치 확인
git brach -a

파일 및 폴더 add
git add .

커밋
git commit -m "commit message"

원하는 브랜치로 push하여 원격 서버에 전송
git push origin [브랜치명]

현재 브랜치에 다른 브랜치 수정사항 병합
git merge [다른 브랜치 이름]

결론

모든것이 마찬가지. 쉽고 심플하게 관리해야한다. 좋은 글, 좋은 연설, 좋은 코드, 좋은 강의 모두는 누가 들어도 이해하기 쉽다. 전체가 한눈에 들어오게 해야하고, 최대한 핵심을 요약해야한다. 좋은 버전관리도 마찬가지다. 누가 봐도 이 깃플로우전략을 이해할 수 있고 관리하기 쉬워야한다.


참고

head : 로컬에서 최신 커밋
head branch: 오리진에서 최신 커밋

https://techblog.woowahan.com/2553/

profile
인생도 디버깅이 될까요? 그럼요 제가 하고 있는걸요

0개의 댓글

관련 채용 정보