야곰 커리어 스타터를 시작하기 전 사전 학습할 내용 중 <Git 사용법>이 있어 미리 정리해두기로 했다.
GitHub
를 사용해오긴 했지만 그저 백업용 서버 저장소 정도로만 사용했다.
물론 최근에는 개인 프로젝트만 했어서 협업의 이점을 느낄 수 없긴 했지만 단순히 commit, push만 하며 git이 주는 유연함을 경험해보지 못했다.
정확히는 몰라서 못썼다...😂
혹시나 코드가 날라갈까봐 이것 저것 시도해보지 못하고 정직하게만 사용했다.
게다가 터미널이 아닌 xcode에서 지원하는 방식으로만 사용해서 익숙해지기 위해 미리 공부한 내용을 정리해둔다!
버전 관리 시스템(Version Control System)으로 파일의 변화를 기록해두었다가 특정 시점의 버전을 다시 꺼내쓸 수 있도록 하는 서비스다.
장점
- 변경 이력을 공유 가능
- 타인이 작업한 내용을 쉽게 병합
- 과거 상태로 쉽게 되돌릴 수 있음
- 여러 분기(Branch)로 병렬 관리 가능
git은 버전 관리 시스템 중 하나로 심플하지만 강력한 기능을 갖고 있어 광범위하게 쓰이고 있다.
mkdir {폴더이름}
git init
이 디렉터리를 git으로 추적할거라는 의미로 git이라는 디렉터리가 생김
git config —global user.name {이름}
- 사용자 이름 설정
git config —global user.email {깃허브메일}
- 사용자 메일 설정
초기에 한 번만 해줘면 다시 설정할 필요 없음
git add {파일 이름}
git commit -m "커밋 메시지"
git branch -M main
git remote add origin {깃허브 Repository 주소}
git push -u origin main
+ (비밀번호 입력)
git clone {저장소주소}
- 이후에는 pull
로 받아오면 됨
git status
- 현재 변경사항들 보기git log
- 커밋 정보 보기(누가, 몇시에, 커밋번호,,)touch .gitignore
git diff {커밋번호}
- 해당 커밋에 어떤 변화가 있었는지 보여줌 git branch
: branch 목록을 보여줌git branch {브랜치이름}
: branch를 생성git branch -d {브랜치이름}
: branch 삭제git branch -f {이동할 브랜치} {이동할 위치}
: branch 위치를 강제로 이동시킴git branch -m {변경할 브랜치이름} {변경할 이름}
: branch의 이름 변경git checkout {전환할 브랜치이름}
: branch 전환git checkout -b {브랜치이름}
: branch를 생성하면서 전환git checkout {기준 커밋(브랜치)}~숫자
: 현재 HEAD를 기준으로부터 숫자만큼 위로 이동 (^는 한커밋 위)git tag {태그내용} {커밋}
: 특정 커밋에 태그를 달아줌 (이정표)git describe {커밋이나 브랜치}
: 가장 가까운 태그와의 거리를 알려줌git cherry-pick {C1 C2... 복사할 commit들}
: 현재 위치에 커밋들을 복사해서 이어줌git rebase -i {이어붙일 위치의 commit}
: 편집기를 통해 커밋들을 복사하고, 순서를 바꿀 수 있음git reset {되돌릴커밋위치}
- 해당 커밋이 아예 없던 것처럼 상태를 되돌림
- 히스토리를 바꾸기 때문에 다른 사람이 쓰는 리모트 브랜치에는 불가능(로컬 브랜치에서만 가능)
git reset HEAD^
git revert {되돌릴커밋}
- 이전의 내용으로 새로 커밋하는 효과
- push 가능
git revert HEAD
git merge {브랜치이름}
- 현재 작업중인 브랜치에 '브랜치이름'의 브랜치를 가져와 병합
- 커밋을 합쳐서 새로운 커밋을 만들어 한 브랜치로 만들어 줌 = 합치기
- 장점 : 모든 커밋 이력을 보존함
- 단점 : 불필요한 새로운 커밋이 생김
git checkout feature
git merge main
git checkout main
git merge feature
같은 커밋라인이면 브랜치 포인터만 이동
git rebase 합칠브랜치
- 커밋을 복사해서 붙여 브랜치를 한줄로 이어줌 = 복사 붙여 잇기
- 장점 : 커밋트리가 한 줄로 되기 때문에 보기 깔끔함
- 단점 : 커밋트리의 히스토리가 수정됨(실제 커밋 순서와 다르게 될 수도 있음)
git reabse {브랜치1} {브랜치2}
: 브랜치1에 브랜치2를 복사해서 이어붙임git checkout feature
git rebase main
git rebase feature
git clone
: 원격 저장소를 만들어 줌git fetch
: 다운로드 단계git fetch
+ git merge
= git pull
: git fetch로 내려받은 커밋들을 main 브랜치와 병합git push
: 변경이력들(커밋)을 원격저장소에 업로드fetch
+ rebase(merge)
+ push
해야 함git pull (—rebase)
+ git push
git branch -b {브랜치이름} origin/main
-> main이 아닌 원격 저장소를 추적하는 브랜치를 만들어 줌git branch -u origin/main {브랜치이름}
git push {origin=저장소} {main=브랜치이름}
: 푸쉬해야할 브랜치와 저장소를 명시해줄 수 있음git push {origin=저장소} {올릴 브랜치}:{붙일 목적지 브랜치}
git push origin :{브랜치}
: 해당 브랜치를 없애버림(로컬, 원격 모두)git fetch origin :{브랜치}
: 로컬에 새 브랜치를 만들어 줌[ 참고자료 ]