버전관리의 시작
현재 디렉토리에 버전관리를 시작하고 싶다면 "git init ." 을 입력하면 된다.
끝에 붙는 .은 현재 디렉토리를 나타낸다.
위를 수행하게 되면 .git 폴더가 생성되는데, 그 폴더로 버전을 관리하기 때문에 지우면 안된다.
버전의 생성
- Repository : 버전이 저장되는 곳
- Working Tree : 아직 버전이 만들어지기 전단계, 파일을 수정하는 곳
- Staging Area : push 하기 전에 우리가 작업한 모든것을 push 하는것이 아니라, Staging Area에 버전으로 만들것을 올려놓고, 그것을 push하게 됨
- git status : 현재 상태를 확인한다.
- git add "파일명" : "파일명"을 스테이지에 올린다.
- git commit -m "~" : 스테이지에 올라와 있는 파일들로 ~라는 이름의 버전을 만듦.
- git log : 버전에 대한 히스토리와 그에 대한 정보를 볼 수 있음.
=> hello1.txt 파일에 1이라고 적은뒤 저장했다.
=> 깃은 명시적으로 어떤 파일을 버전관리 할것인지 알려주어야 한다.
=> hello1.txt라는 파일의 워킹트리의 수정사항을 버전으로 만들기 위해 스테이지에 올리기 위한 명령어이다.
=> 스테이지에 올라와있는 파일을 Repository로 commit함.
=> 버전의 히스토리와 그에 대한 정보를 볼 수 있다.
=> hello1.txt를 수정한 후 저장.
=> status를 보면, 스테이지 위에 올라와있지 않은 수정 사항이 워킹트리에 있음을 나타냄
=> 수정사항을 스테이지에 올리고 commit까지 완료.
=> "Message 2"라는 버전이 만들어졌으며 더이상 commit 할 것이없음.
버전간의 차이점 비교
- git diff : 마지막 버전과 워킹트리 사이의 차이점을 알 수 있다.
- git reset --hard : 작업한 내용을 없애고 저장되어 있는 버전으로 되돌린다.
=> 현재 저장되어 있는 버전에서 3이 지워지고 four가 생김.
만약 10줄 내외의 간단한 코드가 아니라 수백, 혹은 수천줄 짜리 코드가 있고, 그것이 한곳에 있는것이 아니라
전부 세밀하게 흩어져 있다면 마지막 버전 이후에 작업한 내용이 무엇인지 어려울것이다.
하지만 'git diff'를 통해 마지막 버전과 워킹트리 사이에 차이점을 파악하는것을 통해서 작업을 끝내기전,
즉 버전을 만들기전에 최종적으로 검토를 할 수 있다.
=> 작업 내용이 맘에 안들면 이전의 상태로 돌아갈 수 있다.
만약 버전관리를 하고 있지 않았다면, 우리가 작업한 것을 하나하나 지우며 이전 상태로 되돌려야 하는 어려움이 있다.
"버전과 버전 또는 어떤 파일과 파일간의 차이점을 통해서 비교할 수 있고, 그 비교를 통해서 의사결정을 할 수 있다"
라는 것이 버전관리의 정말 중요한 효용이다.
CRUD
- Create : 버전을 만들고,
- Read : 버전을 보고,(status와 log명령) - 현재 여기까지 완료
- Update : 수정하고,
- Delete : 삭제하는것.
checkout과 시간여행
- git checkout '버전주소' : 해당 버전으로 돌아감
- git checkout master : master로 돌아감
=> 현재 hello1.txt에는 1,2,3이 있었고, master 브랜치는 Message3이다.
=> Message2의 주소로 checkout 한뒤, Message2로 돌아갔다.
=> Message1으로 되돌아감
=> master를 가리키게 함으로써 가장 최신 버전이었던 Message3으로 되돌아감.
삭제
- git reset --hard "버전주소" : 버전주소에 해당하는 버전으로 reset한다.
--hard를 붙이게되면 현재 수정하고 있는것과 버전을 모두 reset 시킨다.
하지만 --soft 를 붙이면 현재 수정하고 있는것은 살리고, 버전만 reset 시킨다.
되돌리기
- git revert "커밋주소" : 커밋주소에 해당하는 버전을 revert 한다.
reset의 경우에 R3로 갈 경우에는 커밋한 버전의 주소를 적으면 그 버전으로 가지만,
revert의 경우엔 R4를 revert 해야지만 R3로 갈 수 있다.
<git revert "R4의 주소" 했을 시>
=> reset과 달리 되돌려도 되돌린 버전은 살아있다.
=> revert 커밋이 R4 커밋을 되돌린 것이다.
만약 Message1 으로 가고싶다면 Message2를 revert 하면 될 것 같지만 그러면 안된다.
버전 충돌이 일어나기 때문이다.
따라서 역순 즉, R3 -> Message2 를 revert 다 해주어야 한다.
Message2를 revert 하게 되면 Message2 이후의 모든 커밋을 되돌리는것이 아니라,
Message2를 할때의 변화만 revert 하는것이기 때문에 다 해주어야 한다.
'Git' 카테고리의 다른 글
GIT CLI - 협업 (0) | 2022.02.01 |
---|---|
GIT CLI - Backup (0) | 2022.01.27 |
GIT CLI - Branch & Conflict (0) | 2022.01.23 |
GIT1 (0) | 2022.01.20 |