깃(Git /ɡɪt)은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다.
이 이야기는 실화를 바탕으로 재구성 된 것입니다.
상황 1.
A: 지금 서버에서 잘못된 값을 주고있으니 빨리 업데이트 해야될 것 같아요.
B: 아 그거요? 저번주에 수정했는데 지금 `develop` 브랜치에 개발이 덜 된 작업이 있어서 지금 업데이트 못해요.
A: ….
상황 2.
B: (무아지경 코딩중)
A: 지금 운영서버 로그인이 안된다고하니 빨리 확인좀 해주세요.
B: 넵!
(빌드가 깨지는 상태지만 개발중인 코드를 백업하기 위해 일단 커밋한다.)
A: B님이 작업한거 받았는데 빌드가 안되네요?
B: 로그인 이슈 확인하느라 작업중인거 잠깐 커밋했어요.
A: ….
상황 3.
B: (무아지경 코딩중)
B: 마무리는 집에서 해야겠다. (작업중인 브랜치를 푸시한다.)
A: `develop` 브랜치 코드 왜이래요?
B: 헉! 제가 모르고 `develop` 브랜치에서 작업했네요.
A: ….
다루지 않는 것
- checkout
- fetch
- merge
- pull
- push
- rebase
다룰 것
- cherry-pick
- stash
- reset / revert
cherry-pick
다른 브랜치의 커밋을 가져온다.
git cherry-pick <commit1> <commit2> <…>
# side 브랜치에서 작업 한 C2, C4 커밋이 필요하다.
git cherry-pick C2 C4
stash
작업중인 코드를 스택에 임시 보관한다.
git stash save <message>
git stash
git stash save my custom messagegit stash list
stash@{0}: On master: my custom message
stash@{1}: WIP on master: 7d0ba4e initial commit
git stash pop stash@{0}
git stash liststash@{0}: WIP on master: 7d0ba4e initial commit
reset / revert
커밋을 되돌린다.
reset
커밋하기 전으로 되돌린다.
git reset <option> <commit>
# C2 커밋을 되돌리고 싶다.
git reset C1
reset의 option은 soft, hard, mixed 세가지가 있다.
- soft
# HEAD가 C1으로 이동하고, C2의 작업이 인덱스에 있다.(stage)
git reset — soft C1
- hard
# HEAD가 C1으로 이동하고, C2의 작업이 모두 지워진다.
git reset — hard C1
- mixed (기본)
# HEAD가 C1으로 이동하고, C2의 작업이 인덱스에 없다.(unstage)
git reset — mixed C1
revert
로컬 브랜치에서 reset을 주로 사용하지만, remote 브랜치의 커밋을 되돌리고, 이를 다른 사람과 공유하기 위해 revert를 사용한다.
git revert <commit>
# C2에 이슈가 있어 C1으로 롤백을 해야한다.
git revert HEAD