SSAFY에 와서 제대로 개발 공부를 시작하면서 git도 처음으로 써봤다.
Git은 버전 관리 시스템(Version Control System, VCS)으로 쉬운 버전 관리를 위해서, 개발자라면 필수적으로 다뤄야 하는 시스템이다.
1학기를 지나면서 github에 알고리즘 공부한 코드도 올려보고, 프로젝트 코드도 git에서 관리도 해보고 했지만..
항상 쓰던 방식대로 명령어를 몇 개 외워서 쓰기만 했을 뿐
git에 대해 제대로 이해가 되어 있지도 않고 연습도 부족하다는 생각이 항상 있었어서 언젠가는 제대로 공부해야지...
하다가 2학기에 들어오면서 git branching을 연습해볼 수 있는 재밌는 사이트를 소개받았다.
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
여기서 git branching을 연습해보면서 그 내용을 기록해보려고 한다!!
이 시리즈가 끝났을 때는 git branching 마스터가 되어있기를🙏🙏
Git 명령어
본격적으로 시작하기에 앞서 앞으로 사용될 git 명령어들을 한 번 정리하고 넘어가자.
git commit
: 커밋 생성 (실제 변경사항 확정 및 반영)git branch
: 새 브랜치 생성 (로컬에 생성)git checkout
: 브랜치로 이동git cherry-pick
: 다른 브랜치의 커밋을 선택해서 현재 브랜치에 적용시키기git reset
: 이전 상태로. 특정 커밋까지 이력을 초기화 (※ 이력이 지워지기 때문에 주의 필요 ※)git revert
: 이전 상태로. (이력 유지)git rebase
: 브랜치 병합 (merge와 결과는 같음. 위험할 수 있지만 커밋히스토리 깔끔.)git merge
: 브랜치 병합 (rebase와 결과는 같음. 안전하지만 커밋히스토리 지저분.)
레벨
위와 같은 단계로 연습이 진행될 예정이다.
'git 기본'의 3단계까지 이미 해버렸지만..ㅋㅋㅋ
Git 기본 (Git 커밋 소개)
Level 1. 커밋 소개
왼쪽 - 명령어 입력
가운데 - 현재 상태
오른쪽 - 목표
현재 C0, C1 2개의 commit이 있는 상태이다. 오른쪽 목표를 달성하려면 2번의 git commit
을 더 진행해주면 된다.
Level 2. Git에서 브랜치 쓰기
브랜치는 가벼워서 브랜치를 많이 만들어도 메모리나 디스크 공간에 부담이 되지 않기 때문에 작업은 작은 단위로 나눠서 브랜치로 만드는 것이 좋다!
우선은 브랜치 = "하나의 commit과 그 부모 commit들을 포함하는 작업 내역" 이라고 기억하면 된다.
1) git branch bugFix
: 'bugFix'라는 이름의 branch를 만들고,
2) git checkout bugFix
: checkout으로 해당 branch로 이동!
Level 3. Git에서 브랜치 합치기 (Merge)
별도의 브랜치를 합치는 방법은 몇 가지가 있다. 그 중 첫 번째로 merge에 대해 해볼 것이다.
Merge는 2개의 부모(parent)를 가리키는 특별한 commit을 만든다.
2개의 부모가 있는 commit이라는 것은 "한 부모의 모든 작업내역과 나머지 부모의 모든 작업, 그리고 그 두 부모의 모든 부모들의 작업내역을 포함한다"라는 의미가 있다.
1) git branch bugFix
: bugFix라는 이름의 브랜치 생성
2) git checkout bugFix
: bugFix 브랜치로 이동
3) git commit
: bugFix 브랜치에 대해 commit 생성
4) git checkout main
: main 브랜치로 이동
5) git commit
: main 브랜치에 대해 commit 생성
6) git merge bugFix
: bugFix 브랜치를 main 브랜치로 병합
Level 4. 리베이스(rebase)의 기본
별도의 브랜치를 합치는 두번째 방법은 리베이스(rebase)이다.
리베이스는 기본적으로 commit들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것이다.
조금 어렵게 느껴질 수 있지만, 리베이스를 하면 commit들의 흐름을 보기 좋게 한 줄로 만들 수 있다는 장점이 있다.
리베이스를 쓰면 실제로는 따로따로 개발된 기능들이어도 순서대로 개발한 것처럼 보이게 되면서 저장소의 커밋 로그와 이력이 한결 깨끗해진다!!
1) git checkout -b bugFix
: bugFix라는 이름의 브랜치 생성 & 이동 (branch와 checkout 명령어를 한꺼번에 수행한다!)
2) git commit
: bugFix브랜치에 대해 commit 생성
3) git checkout main
: main 브랜치로 이동
4) git commit
: main 브랜치에 대해 commit 생성
5) git checkout bugFix
: bugFix 브랜치로 이동
6) git rebase main
: bugFix 브랜치를 main 브랜치에 리베이스 하기
다음 포스팅에 이어서...