git commit -am
자동으로 add와 message만 쓰게 해준다.
exo 브랜치를 생성하고 exo 브랜치로 이동을 했다.
master 브랜치와 상태가 같다. 브랜치를 생성하면 현재 브랜치의 상태를 그대로 복사한다.
git log만 하면 뭐가 마스터고 뭐가 브랜치인지 구분이 잘 안된다.
git log --branches --decorate
master 브랜치의 최신 커밋이 2이고 exo 브랜치의 최신 커밋이 4라는 걸 알 수 있다. head가 exo이므로 현재 exo 브랜치에 체크아웃 된 것을 알 수 있다.
지금은 별 차이가 없어보이지만, master와 exo가 각자의 길을 가면 차이가 확 보인다.
master에 f3.txt 추가했다.
왼쪽에 보면 가지가 다른 색깔로 구분되는 것을 알 수 있다.
간결하게 브랜치를 파악할 수 있다.
stree 명령어를 치면 gui에서 나타난다.
git log branch1..branch2
brach1과 branch2의 차이점을 보여준다.
exo의 내용을 master에 병합해보자.
master로 체크아웃을 한다음 master에서 merge를 해야한다.
자동으로 새로운 커밋이 됐다. 그 커밋은 merge할때 만든 커밋이다. 이 커밋은 두 개의 부모를 가지고 있다.
exo는 3번과 4번은 가지고 있지만 master가 작업했던 5번은 가지고 있지 않다. 5번도 가지고 있게 만들어보자.
exo도 master와 똑같은 커밋을 가지고 있고, 3, 4, 5를 공통으로 부모로 갖고 있는 상태가 되었다.
master로 돌아가서 필요없는 exo 브랜치를 지웠다.
해결해야할 이슈가 생겨서 브랜치를 추가하자.
iss53 커밋이 c2 커밋을 master와 동시에 가리킨다.
issue53에서 내용을 수정하고 commit하면 이렇게 된다.
급하게 해결해야할 문제가 생겨서, master 브랜치에서 hotfix를 했다.
hotfix를 마스터 브랜치로 병합을 하면,
fast-forward는 빨리감기라는 뜻이다. master 브랜치가 가리키는 커밋을 hotfix가 가리키는 커밋으로 빨리감기를 하면 병합이 끝난다.
이전에서는 merge를 하면 별도의 commit을 생성했는데 여기서는 하지않고, master가 가리키는 커밋을 바꾸기만 한다. 이것을 fast-forward라고 한다.
이제 iss53을 처리하기 위해 체크아웃하고 파일을 수정했다.
iss53이 master로부터 독립한 이후에 master에 변화가 생겼다. 이럴때는 master와 iss53의 공통의 조상을 찾고, c4와 c5를 합치고, 별도의 커밋을 만든다 (c6)
패스트 포워드는 커밋을 만들지 않고, 패스트 포워드가 아닌 것은 커밋을 만든다.
stash는 감추다라는 뜻이다. 브랜치에서 작업하던 내용이 끝나지 않았을 때 커밋하기전 어디에 숨겨두는 것이다.
아직 작업을 다 끝내지 않았는데 master 브랜치로 checkout을 해야하는 상황이라고 가정하자,
그러면 exp에서 작업하던 것이 master에도 영향을 준다.
git stash
WIP는 Working In Process다
master 브랜치에서 작업을 하다가 돌아와서
git stash apply
를 하면 숨겨둔 파일을 볼 수 있다
reset을 해서 날라간 것 처럼 보이지만
명시적으로 삭제한 것이 아니라면 항상 살아있다.
git stash apply를 하면 가장 최근 것이 적용된다.
git stash drop을 하면 최근 것이 삭제된다.