Git의 대표적인 브랜치 전략
- Git Flow … 유연한 브랜치 구성이지만 복잡
- GitHub Flow … master 브랜치는 deploy가능한 상태를 유지하기에 최소 구성
- GitLab Flow … develop, staging, production 브랜치등의 상용 전개를 의식
※ GitHub과 함께 사용하기에 GitHub Flow를 소개한다.
branch / commit
main 은 근간 브랜치이고 새로운 기능을 추가할 시에는 main 에서 각각 새로운 브랜치(dev-1, dev-2.. 이름은 자유)를 파생시켜 작업을 진행하게 된다.
동시에 새기능을 추가시에는 같은 화일을 건들면 나중에 merge시에 conflict 가 되니 주의가 필요하다.
commit 은 브랜치내에서 가능하고 작은 단위의 작업이 끝남과 동시에 commit 을 자주 시켜주면 잘못되었을 시에 전 commit HEAD 로 되돌릴 수 있다.
파생 브랜치에서 기능이 전부 구현되면 main 브랜치에 merge 를 해 줌으로써 main 이 새로운 기능을 보유할 수 있게 된다.
여러개의 파생 브랜치 작업시에는 다른 브랜치의 merge로 인해 main 이 변경되니 반드시 main로 부터 새로운 항목을 적용시켜 merge 할 수 있도록 미리 main 으로 부터 pull 을 미리 해 줄 필요가 있다.
merge 가 끝난 브랜치는 삭제를 하여 결국 main 브랜치만 남게 된다.
설명하는 내용은 리모트와 연결되지 않은 로컬PC내에서의 git 의 설명이다.
1. 새 리포지트리를 생성 (이 폴더는 버전관리를 하겠다)
git init
2. 새 파일을 생성
A.txt
A.txt 은 아직 트랙킹받지 않은 상태이고 브랜치는 아직 설정되지 않음
3. 스테이징(add) : commit 준비를 위해 인덱스를 생성
git add . 점(.) 은 모든 화일 서브 디렉토리를 스테이징
A.txt 는 unstage 상태, new file 로 인식되었고 아직 commit 되진 않았다.
4. commit : 상태 변화의 표식
git commit -m "first commit" -m 은 메세지
commit 이 됨과 동시에 자동으로 master 브랜치가 생성 할당 되었다.
HEAD 는 현재의 작업 브랜치를 가르키고 현재의 브랜치는 master 이다.
detached HEAD 의 멧세지가 나는 경우는 HEAD가 어느 브랜치도 가르키지 않고 있는 상태이다.
5. 새 브랜치의 생성
이제 main 은 기초 브랜치로 두고 새로 브랜치 dev_1를 생성해서 수정을 하도록 하자.
신명령(git 2.23 이후) | 구명령 |
git switch -c dev_1 | git checkout -b dev_1 |
6. A.txt 의 내용을 변경한 후 원래 내용으로 되돌리기
A.txt 의 변경내용 보기
git diff -- A.txt
① 스테이징(add) 전의 상태
신명령(git 2.23 이후) | 구명령 |
git restore A.txt | git checkout -- A.txt |
전체를 되돌리기 | |
git restore . | git checkout . |
② 스테이징(add) 후, commit 전의 상태
git restore --staged A.txt
git restore A.txt
③ commit 된 상태
옵션1) 화일변경, 스테이징, commit 을 모두 버리고 바로전의 commit 으로 HEAD 를 이동
git reset --hard HEAD~
※ commit 을 새로운 브랜치로 되살리는 방법
git reflog 이력표시
git checkout -b 새로운브랜치명 삭제된commit해시코드
옵션2) 변경화일은 남긴채 스테이징, commit 만 버리고 바로전의 commit 으로 HEAD 를 이동
git reset HEAD~
※ 스테이징이 사라졌기 때문에 commit 만 실행하면 에러 발생
옵션3) 변경화일,스테이징은 남긴채 commit 만 버리고 바로전의 commit 으로 HEAD 를 이동
git reset -- soft HEAD~
'Commands > git + github' 카테고리의 다른 글
3. bug fix 생성 (0) | 2025.02.05 |
---|---|
2. tag & release (0) | 2025.02.05 |
1. git - 정상적인 처리 (0) | 2025.02.05 |