해당 내용은 생활코딩에서 공부한 내용을 복습하기 위해 다시 간단하게 정리한 글입니다.
더 자세한 건 생활코딩에서
버전 관리 시작
먼저 git bash를 키고 버전을 생성할 디렉토리로 이동한다.
git bash에 git init . 입력
입력하고 난 후 .git이라는 디렉토리가 생성된다.
.git이 추가됬다.
.git에 버전이 저장되므로 .git은 지우면 안된다.
버전 생성전에 아래 명령어를 입력해준다.
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Your Name과 you@example.com은 각자에 맞게 변경해준다.
버전 생성
수정한 파일 전체는 Working tree에 존재하고, 그 중 버전을 생성할 일부(전체)를 Staging Area에 올린다.
git에게 버전을 생성하라고 하면 git은 Staging Area에 있는 파일들로 하나의 버전을 생성하여 repository(.git)에 넣는다.
즉, Working tree는 파일을 수정하는 곳
Staging Area는 그 중 버전을 만들 파일들이 있는 곳
Repository는 만들어진 버전들이 있는 곳이라고 생각하면 된다.
버전을 생성하기 위해 파일을 생성한다.
파일이 추가된 후 현재 상태
git add hello1.txt로 파일을 Staging Area로 올린다.
hello1.txt가 Untracked files에서 Chages to be committed으로 변경되었다.
git commit -m "Message 1"으로 Repository에 버전을 생성해준다.
그 후 Working tree에는 아무것도 존재하지 않는다.
버전 이동
현재 상태
버전을 이동할 때는 (삭제 x) git checkout <commit>을 사용한다.
<commit>에는 git log를 치면 나오는 각 commit(노란색) 뒤의 id를 입력하면 된다.
버전이 변경된 모습
가장 마지막 버전으로 이동하고 싶으면 git checkout master를 입력하면 된다.
버전 삭제
버전을 이동할 때 그 후의 버전은 삭제하고 싶다면
git reset을 사용하면 된다.
git reset에는 여러 모드가 있고, 지금 사용할 모드는 --hard이다.
아예 master가 Message 2 버전으로 변경되었고 그 이후의 버전은 삭제되었다.
버전으로 연결된 링크가 없으면 그 버전(commit)은 삭제되고, 링크가 있으면 삭제되지 않는다.
branch가 가리키는 커밋을 변경할 때는 reset을
head가 가리키는 branch나 commit을 변경할 때는 checkout을 사용한다.
git revert
버전을 삭제하지 않고 이전 버전으로 바꾸고 싶을 때 사용한다.
만약 git revert version4를 하면 version 4에서 추가된 내용들이 삭제된 버전이 생성된다.
따라서 그 이전 버전인 version 3와 동일한 내용을 가진 새로운 버전이 생성된다.
git revert 실행
git revert 전 git revert 후
기존의 R4는 삭제되지 않고 Revert R4가 추가되었다.
Revert R4는 R3와 내용이 같다.
revert는 해당 버전에서 추가된 내용을 삭제한 새로운 버전을 추가하는 것이기 때문에
중간의 Message 2로 revert를 하면 충돌이 난다.
그 후 R3와 R4에서 추가된 내용을 어떻게 할지 git이 처리하지 못하고 conflict (충돌)가 일어난다.
따라서 역순으로 revert를 해야한다.