버전 비교/임시저장/되돌리기/브랜치
비교: git diff
작업디렉토리와 repo간의 차이를 보여준다. 변경사항을 stage에 올리면 변경사항을 비교할 수 없다. stage와 repo를 비교하려면 --staged
옵션을 쓰면된다.
커밋 끼리 비교하려면 git diff <커밋1(기준이되는 커밋)> <커밋2(변경이 궁금한커밋)>
로 한다. 커밋1에 대해 커밋2가 달라진 것을 보여준다.
* git log --oneline
옵션을 쓰면 커밋의 해쉬아이디를 짧게 일부만 따와서 한줄로 보여준다. 짧은 해쉬값도 긴것과 동등하다.*
작업 되돌리기: 중요할 때 쓰려면 실습이 답
revert와 reset의 차이
revert는 버전을 되돌린 새로운 버전을 만든다.(기록이 남는다. 지금까지의 작업내역에 영향이 없다.)
안전하게, 작업내역을 남기면서 되돌아가고 싶을 때 쓴다.git revert <취소할 커밋>
reset은 말 그대로 해당 커밋으로 돌아간다.(기록이 안남는다. 지금까지의 작엽내역에 영향을 미친다.)
가독성을 위해 불필요한 커밋 목록을 만들고 싶지 않을 때 쓴다.git reset --mixed <되돌아갈 커밋>
둘의 대상이 되는 커밋이 다름을 명심하라
reset의 세가지 옵션
버전이 만들어지는 과정:
- 변경사항생성(wd)
- 스테이지에 추가
- 커밋
soft: 1, 2번은 남는다. wd와 스테이지엔 내가 만들고 올린 변경사항이 남아있다.
mixed: 1번 만 남는다.
hard: 작업디렉토리까지 과거로 돌아간다.
변경사항 임시저장 : git stash
- 버리자니 아깝고 쓰자니 별로고...
- 작업 중에 요구사항이 변경됨
이럴 때 스테이지에 올라간 작업 내용을 따로 임시저장해둘 수 있다.git stash push -m "내용"
을 통해 어떤 작업내역을 임시저장한건지 표시할 수 있다.git stash list
를 통해 임시저장 목록을 볼 수 있다. 0 에 가까울 수록 최신에 저장된 것.
브랜치 관리
포트폴리오에서는 얼마나 커밋메시지를 잘 작성하고 브랜치 관리를 잘 하는지가 중요하다. 브랜치가 없다면 수많은 요구사항들을 위한 개발을 할 때 수정사항을 취합하고 조율하기 매우 힘들 것이다.
- 나눈다.
- 각자 작업한다.
- 합친다.(필요할 때)
브랜치의 이름
브랜치의 이름은 마구잡이로 짓지 않는다. 작업 방식인 flow에 맞추어 짓는데, git flow의 경우 master(main), feature/, release/, hotfix/, 등의 이름을 쓴다.
HEAD
내가 현재 작업중인 브랜치의 커밋을 가리킨다. 보통 해당 브랜치의 최신 커밋을 가리킨다. git checkout 명령은 이 HEAD가 가르킬 브랜치(혹은 커밋)을 바꾸는 것이다. 이렇게 체크아웃 하면 특정 브랜치에서 작업할 수 있도록 작업 환경이 바뀐다.
깃헙을 이용한 협업
깃헙에 올리는 것은 파일이 아니라 버전을 업로드/다운로드 하는 것이다.
clone, push, pull, fetch
clone은 원격 저장소를 복제해 내 로컬 저장소로 만드는 것이다.
push는 내 로컬 저장소 브랜치의 커밋을 원격 저장소에도 반영하는 것이다.
fetch는 원격 저장소의 내용을 가져오기만 하는 것이다.
pull은 패치로 가져온 원격저장소와 로컬저장소의 브랜치를 merg하는 것이다.
일반적인 협업방식: no colaborator, no direct merge // PR
- 기여할 저장소를 내 원격 저장소로 포크 하기
- 포크한 저장소를 로컬로 클론
- 브랜치 생성해서 작업, 커밋
- 푸시
- 원본 저장소에 PR 보내기
싱크 포크(sync fork)
원본 레포의 어느 브랜치가 내 레포의 해당 브랜치보다 앞서 있다면 업데이트 할 수 있다.
이 과정에서도 충돌이 일어날 수 있다.