깃 허브 콜라보레이터로 원격 저장소에 협업자들을 추가한다.
그리고 git clone으로 동일한 환경을 만들어 준다.
왼쪽 오른쪽이 다른 사람일때 동시에 같은 파일에 대해서 작업을 하다가 왼쪽 사람이 먼저 작업이 끝내고 그것을 push 했는데 오른쪽 사람을 pull을 해오지 않고 수정을 해서 올리면 어떻게 될까?
그림과 같이 pull을 먼저 하라고 에러가 난다.
그래서 지시대로 pull을 해오면
현제 내 작업 상황과 원격 저장소에 있는 내용이 충돌이 나는것을 볼 수 있다.
즉 협업을 할때는 무조건 pull -> commit -> push를 해줘야 한다.
git fetch -> get merge FETCH_HEAD -> commit -> push
이것은 무엇인지 알아보겠다.
우리가 작업을 하고 commit을 하면 우리의 master 브랜치가 원격 저장소의 master 브랜치보다 앞서서 버전을 가르키게 된다이때 git은 push를 해서 로컬 저장소와 원격 저장소의 환경을 일치 시키라고 한다.
git fetch를 통해서도 원격저장소에서 버전을 가져올 수 있다.
이 경우에는 원격저장소의 환경을 가져오지만 나의 HEAD 상태를 유지한다.
원격 저장소와 같은 환경을 만드려면 git pull을 하거나 git merge을 추가로 해주면 된다.
git merge orgin/master = git fetch; git merge FETCH_HEAD
code review 해주는 도구들
gerrit 개발자들끼리 서로의 코드를 상호 검증해주는 사이트
특정 커밋으로 checkout 한뒤 새로운 버전을 만들면 어떻게 되는가?
이 상태에서 2번째 커밋으로 checkout을 하면
그 이후 새로운 버전을 커밋하면
이렇게 브랜치가 없는 새로운 4번째 커밋이 생기게 된다. 이때 다시 checkout master로 마스터 브랜치로 가면
4번째 커밋 버전이 사라진것을 볼 수 있다. 지금 4번째 커밋은 아직 삭제된 건 아니고, 브랜치에 연결되지 않은 '고아(commit orphan)' 상태라고 한다.
현재는 브랜치에 연결되어 있지 않은 상태지만, 아직 Git 내부에 살아있어
(가비지 컬렉션이 실행되기 전까지 약 30일 정도 보존됨)
git fsck --lost-found
이것은 아무 브랜치도 연결되어 있지 않은 commit orphan들을 찾는 명령어이다. 이것으로 고아 상태의 버전을 찾고
git branch keep-lost-commit 80827ed
해당 고아 버전에 연결될 새로운 브랜치를 만들어 주면
이렇게 다시 사라졌던 버전을 찾을 수 있다.