팀 개발을 위한 github 시작하기를 읽고 기억하고 싶은 부분만 메모해보았다!
평소 헷갈리던 개념인 rebase 위주로 기록함.
HEAD란?
HEAD는 현재 작업 중인 브랜치를 가리킨다. 보통 * 표시가 붙어있다.
브랜치는 커밋을 가리키므로 HEAD도 커밋을 가리킨다.
결국 HEAD는 현재 작업 중인 브랜치의 최근 커밋을 가리킨다.
브랜치는 언제 사용할까?
1. 새로운 기능 추가
2. 버그 수정
3. 병합과 리베이스 테스트
4. 이전 코드 개선 : 함수의 로직을 개선
프로젝트 진행시 사용하는 깃허브 사용방식은 크게 3가지로 나뉜다.
1. 원격저장소 등록하기 (clone 또는 remote)
2. 커밋 ( add 후 커밋하기)
3. 병합하기 (merge 또는 rebase)
1. 원격저장소 등록하기
git remote <원격저장소 이름> <원격저장소 주소>
원격저장소를 등록한다. 프로젝트를 로컬 저장소에 연결할 때 주로 사용한다.
원격저장소는 여러 개 등록할 수 있지만 같은 별명의 원격저장소는 하나만 가질 수 있음. 통상 첫 번째 원격저장소를 origin으로 지정한다.
git remote -v 로 원격저장소 목록을 볼 수 있다.
2. 커밋하기
git add 및 commit 동작 원리
git add시 작업하던 파일들이 stage에 추가된다.
git commit시 스테이지 내용으로 트리 객체가 만들어진다. 커밋에는 트리 객체와 커밋 메시지가 포함된다.
git status로 워킹트리, 스테이지, 헤드커밋의 세가지 저장공간의 차이를 보여준다. 커밋 이후 git status명령을 내리면 clean 상태임을 보여주는데 세가지 공간의 내용일 동일함을 의미한다.
브랜치를 체크아웃하면 HEAD를 해당 브랜치로 변경하고 브랜치가 참조하는 커밋의 내용으로 스테이지와 워킹트리의 내용을 변경한다. (브랜치 변경시 코드가 변경되는 이유이다.)
3. 병합하기
브랜치를 병합하는 방법에는 크게 두가지 방법이 있다.
대부분이 사용하는 merge와 rebase이다. 여기서 rebase에 대해 자세히 설명해보려고 한다.
git rebase <대상 브랜치>
rebase는 빨리 감기 병합이 가능하다. (병합을 쉽고 빨리한다는 소리임)
현재 브랜치에만 있는 새로운 커밋을 대상 브랜치 위로 재배치한다.
git checkout branch1
git rebase master
git log --oneline --all # 로그 확인 - 변한게 없음
git checkout master
git rebase branch1 # 빨리감기 병합
git log --oneline --all
git push
git branch -d branch1 # 브랜치 삭제
- 브랜치1와 main이 서로 다른 커밋을 가리키다가 main에서 git rebase branch1 시도시 브랜치1과 main이 동일한 커밋을 가리킨다.
- 브랜치1은 이미 main브랜치 위에 있기 때문에 재배치할 커밋이 없다.
'Computer Engineering > github' 카테고리의 다른 글
[github] permission denied(public key) ssh key err (0) | 2022.11.06 |
---|---|
git squash로 merge 깔끔하게 기록 남기기 (예제) (0) | 2022.10.12 |
github flow 개발 전략 (0) | 2022.07.19 |
[github] 커밋 하나 되돌리기 (revert, reset) (0) | 2022.06.23 |
[github] error: src refspec main does not match any (0) | 2022.05.21 |