입사한 이후 버전관리 때문에 애를 먹었다. 그래서 버전관리도 이번기회에 뿌리를 뽑기로했다.
깃 커맨드도 외우고 브랜치 분기해서 삭제해보고 로컬에만 브랜치 삭제했을때 문제점. 그리고 origin에 올라간 커밋들을 revert 하고서 새로운 분기 땄을때 경우 등등 여러 경우를 만나서 문제를 해결했던 기록을 여기에 남긴다.
사내 규칙에 맞춰서 git flow 전략을 따르기로 했다. 기본적으로 브랜치의 종류는 3개였다.
Master : 최종 실서버 브랜치,
develop : 각 프론트, 백엔드쪽에서 쓰는 main 브랜치(여기서 master로 병합하고, feature로 분기한다)
feature : 기능별로 구분해둔 브랜치. develop에서 분기한 이후 작업이 끝나면 develop으로 병합한다.
기본적으로 이런 구조로 버전관리를 진행한다. 하지만 처음에 피쳐브랜치를 따는걸 깜빡하고 바로 master 브랜치에 작업하고 커밋을 해둔 상태였다. 다행히 revert 로 작업을 되돌렸다. 그런데 develop브랜치도 사실상 제대로 쓰지 않는 상태였다, git flow 전략을 고수하지 않은채 master 에서 바로바로 실서버로 반영해오셨기 때문이었다. 그래서 이번 기회에 다같이 제대로 된 git flow 전략을 하기로 했던 터라 시행착오가 있었다.
1번 해결과정을 진행 한 후에 팀장님이 실서버에 바로 푸쉬되는 문제를 방지하기 위해 팀장 계정만 실서버에 push를 할 수 있게 설정해두셨다. 그러니 내 로컬환경에서 master 브랜치를 revert 하더라도 오리진에 올릴 수 없었다.
결국 revert 하기 이전의 커밋으로 reset -hard 를 진행했다. 따라서 내가 진행했던 master 브랜치의 커밋들은 전부 날라갔고, 작업하기 이전의 커밋에서 분기한 브랜치들의 작업들만 남게 됐다.
사실상 master 브랜치에서의 커밋은 4개였다. 기능작업 2개, revert 2개
이 4개의 커밋만 사라졌다.
브랜치 삭제 과정
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 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: 오리진에서 최신 커밋