-
우아한테크캠프 Day09우아한테크캠프 2018. 7. 12. 20:53
오늘은 호눅스의 첫 번째 수업이었다. 주제는 git, 원리 위주의 수업이었다.
Day09 학습 내용
Git의 물리적인 저장소
워킹 디렉토리
스테이지
로컬 저장소
원격 저장소
git init : 초기화 .git = 로컬저장소
※ 개발자는 워킹 디렉토리를 건드릴 뿐, 로컬 저장소를 건들지는 않는다.
git status : 워킹 디렉토리와 stage의 차이점을 보여주는 명령어
git add : 변경사항을 stage(index)에 올리는 명령어
※ 물리적으로 stage는 .git 안에 있다. (논리적으로 이해하기 쉽게 별도의 공간이 있다고 그리는 것일 뿐)
git commit : 스냅 샷(저장)하는 명령어
※ 커밋하는 이유? 특정 커밋한 시점으로 되돌아가기 위해
커밋도 .git에 저장한다.
commit은 항상 부모에 대한 참조를 가지고 있다. But. 자식에 대한 참조를 가지고 있지는 않다.
Why? 비효율적이기 때문에, 만약 자식에 대한 참조까지 가지고 있다면 자식이 생길 때 자식과 부모 2개가 수정되어야 한다.
git clone : 원격 저장소의 내용을 로컬로 복사하는 명령어
git clone <저장소> [DIR]
URL (HTTP)
URN (SSH)
디렉토리
git push : 특정 브랜치의 변경된 커밋들만 올려주는 명령어 (로컬 저장소에 있는 커밋 -> 원격 저장소로 보내는 명령어)
원격저장소에 없는 커밋들만 보낸다.
git pull : 원격 저장소의 변경된 커밋 -> 로컬 저장소 -> 워킹 디렉토리로 가져와서 merge까지 시켜주는 명령어 (fetch + merge)
git fetch : 원격 저장소의 변경된 커밋들 전부 -> 로컬 저장소로 가져오는 명령어
git fetch 원격저장소 로컬브랜치
git rebase : merge와 비슷한 명령어 (로컬 저장소 -> 워킹 디렉토리)
git rebase 원격저장소/로컬브랜치
HEAD : 현재 작업 중인 브랜치를 참조하는 참조변수 (HEAD -> master)
※ HEAD가 가리키고 있는 곳이 새로 생기는 커밋의 부모가 된다.
브랜치 : 커밋을 참조하는 참조변수
git reset : 되돌리는 명령어
soft: HEAD만 이동
mixed: HEAD 이동, 인덱스 내용 변경
hard: HEAD 이동, 인덱스 내용 변경, 워킹 디렉토리 변경
git checkout : HEAD를 옮기는 명령어 (로컬 저장소에 있는 커밋 내용을 워킹 디렉토리 + stage 둘 다 반영하는 명령어)
※ git commit : 로컬 저장소, stage, 워킹 디렉토리 상태를 똑같이 만듦
git checkout : 로컬 저장소, stage, 워킹 디렉토리 상태를 똑같이 만듦
git stash : 임시공간에 저장하는 명령어 (긴급한 상황에 사용), 인덱스와 워킹 디렉토리의 내용을 임시 저장
브랜치를 생성해서 기능 A를 개발하고 있는데, 급하게 장애가 발생해서 다시 master로 checkout한 다음, 새로 브랜치를 생성해서 해결해야 하는 상황이다.
이럴 때 기능 A를 커밋하고 master로 checkout해도 되지만 아직 완성이 안 된 상태라 지저분한 커밋을 남기고 싶지는 않다.
이런 상황에 git stash를 사용해서 임시공간에 저장하고 master로 이동해서 급한 불을 끄면 된다.
git rebase : 현재 브랜치에서 대상 브랜치와 차이가 나는 커밋을 가져오는 명령어
git cherry-pick : 특정 커밋만 가져오고 싶을 때 사용
git merge : 한 브랜치를 다른 브랜치로 합칠 때 사용
장점 : 깔끔하게 만들어진다.
단점 : 충돌이 발생 할 가능성이 크다.
git tag : 태그도 참조의 일종, 태그는 갱신되지 않는다. (주석을 달 수 있음)
git에서 되돌아가는 3가지 방법
git reset : 비추
git revert : 충돌 날 확률이 높음
브랜치를 만들어 돌아가는 방법 : 강력 추천, 그 후 merge, rebase로 단일화 작업
'우아한테크캠프' 카테고리의 다른 글
우아한테크캠프 Day10 (0) 2018.07.14 자바 ORM 표준 JPA (0) 2018.07.13 우아한테크캠프 Day08 (0) 2018.07.12 우아한테크캠프 Day07 (0) 2018.07.11 Git과 Github 정리 (0) 2018.07.10