문서를 수정할 때마다 간단한 메모와 함께 수정 내용을 스냅숏으로 찍어서 저장한다. 이것을 '버전'이라고 한다. 깃의 가장 중요한 기능이 바로 이 버전을 관리하는 것이다.
1. 깃 저장소 만들기
2. 버전 만들기
3. 커밋 내용 확인하기
4. 버전 만드는 단계마다 파일 상태 알아보기
5. 작업 되돌리기
1. 깃 저장소 만들기
1) 깃 초기화 하기 - git init
$ mkdir [디렉토리명]
$ cd [디렉토리]
$ git init
git init 명령을 통해 깃을 사용할 수 있도록 디렉터리를 초기화하는 것이다. '.git'이라는 디렉터리가 생겼다. 이 디렉터리가 깃을 사용하면서 버전이 저장될 '저장소(repository')이다.
2. 버전 만들기
버전이란 문서를 수정하고 저장할 때마다 생기는 것이라고 생각하면 쉽다. 파일을 다른 이름으로 저장해 버전을 만드는 방법보다 훨씬 쉽게 버전을 만들고 만든 시간과 수정 내용까지 기록할 수 있는 것이 바로 깃과 같은 버전 관리 시스템이다.
1) 스테이지(stage)와 커밋(commit) 이해하기
파일은 세 가지 단계를 거친다. 작업트리, 스테이지, 저장소.
작업트리(working tree, working directory)
파일 수정, 저장 등의 작업을 하는 디렉터리로 앞서 만들었던 hello-git 디렉터리가 작업트리가 된다.
스테이지(stage)
스테이지는 버전으로 만들 파일이 대기하는 곳이다. 예를 들어, 작업트리에서 10개의 파일을 수정했는데 4개의 파일만 버전으로 만들려면 4개의 파일만 스테이지로 넘겨주면 된다.
저장소(repository)
스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다. 스테이지와 저장소(repository)는 .git 디렉터리에 존재한다.
버전을 만드는 과정을 보면, 파일을 수정또는 저장하면 그 파일은 작업트리에 있다. 해당 파일을 버전으로 만들고 싶을 때 스테이지에 넣는다. 그리고 버전을 만들기 위해 커밋(commit) 명령을 내린다. 그러면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장된다.
정리하면,
1. 작업트리에서 문서 수정
2. 버전으로 만들고 싶은 것을 스테이징
3. 스테이지 파일을 저장소로 커밋
2) 작업트리에서 빔으로 문서 수정하기
$ git status
hello.txt 파일을 생성후 다시 git status를 한다.
한번도 버전관리하지 않은 파일을 untracked files라고 한다.
3) 수정한 파일을 스테이징 하기 - git add
깃에 버전 만들 준비를 하라고 알려주는 것을 '스테이징(staging)', '스테이지에 올린다'라고 한다. 스테이징 내용을 .git/index 파일에 저장하기 때문에 '인덱스(index)에 등록한다.' 라고도 한다.
$ git add hello.txt
$ git status
untracked files: 문구가 changes to be commited:로 바뀌었다. 수정한 hello.txt가 스테이지에 추가되었다.
4) 스테이지에 올라온 파일 커밋하기 - git commit
깃에서 버전을 만드는 것을 커밋(commit)한다고 말한다. 어떤 변경사항이 있었는지 메시지를 함께 기록한다.
$ git commit -m "message1"
$ git status
저장소에 저장된 버전을 확인해보자.
$ git log
5) 스테이징과 커밋 한번에 처리하기 - git commit -am
단, 이것은 tracked files에 한해서 가능하다.
$ git commit -am "message2"
3. 커밋 내용 확인하기
1) 커밋 기록 자세히 살펴보기 - git log
커밋 해시는 커밋을 구별하는 아이디라고 생각하면 된다. git log를 통해 나오는 정보를 '커밋 로그'라고 한다.
2) 변경사항 구분하기 - git diff
git diff 명령을 사용하면 작업트리에 있는 파일과 스테이지에 있는 파일을 비교하거나, 스테이지에 있는 파일과 저장소에 있는 최신 커밋을 비교해서 수정한 파일을 커밋하기 전에 최종적으로 검토할 수 있다.
$ git diff
'-2'는 2가 삭제되었다는 뜻이고, '+two'는 two라는 내용이 추가되었다는 뜻이다.
4. 버전 만드는 단계마다 파일 상태 알아보기
파일의 상태를 이해하면 파일이 버전 관리의 여러 단계(작업트리, 스테이지, 저장소) 중 어디에 있는지, 그 상태에서 어떤 일을 할 수 있는지 알 수 있다.
1) tracked 파일과 untracked 파일
작업 트리에 있는 파일은 크게 tracked 파일과 untracked 파일로 나뉜다. 깃은 한 번이라고 커밋을 한 파일의 수정 여부를 계속 추적한다. 깃이 추적한다는 뜻에서 tracked 파일이라고 부른다. 반면 한번도 깃에서 버전관리를 하지 않은 파일은 수정 내역을 추적하지 않기 때문에 untracked 파일이라고 표시한다.
$ git add .
$ git status
'.'을 붙이면 작업트리에서 수정한 파일들을 한꺼번에 스테이징할 수 있다.
버전관리를 했던 tracked 파일인 hello.txt는 modified: 로 나오고 untracked 파일인 hello2.txt는 new file: 로 나온다. 모두 스테이지에 올라왔다.
$ git commit -m "message3"
$ git log
커밋에 관련된 파일까지 함께 살펴보려면 --stat 옵션을 사용한다.
$ git log --stat
* .gitignore 파일을 만들어 그 안에 버전 관리하지 않을 파일 또는 디렉터리 이름이나 파일 확장자를 입력하면 버전관리에서 제외할 수 있다.
2) unmodified, modified, staged 상태
* 방금 커밋한 메시지 수정하기
$ git commit --amend
5. 작업 되돌리기
checkout 명령은 2.23.0 버전이후 switch(브랜치변경)와 restore(변경사항복원)로 분리되었다.
작업 트리의 변경사항을 취소하려면 restore를 사용하라고 되어있다.
$ git restore hello.txt
2) 스테이징 되돌리기 - git reset HEAD 파일 이름 => git restore --staged 파일 이름
스테이지에서 내리려면 git restore --staged 명령을 사용하라고 나온다.
$ git restore --staged hello2.txt
파일이 스테이지에 올라가기 전 상태로 돌아왔다.
3) 최신 커밋 되돌리기 - git reset HEAD^
가장 마지막에 한 커밋을 취소하는 방법에 대해 알아보자.
$ vi hello2.txt
$ git commit -am "message4"
$ git log
현재 가장 최신 커밋(HEAD -> master)이 message4이다. 이것을 git reset HEAD^로 커밋을 취소하면 커밋도 취소되고 스테이지에서도 내려간다.
$ git reset HEAD^
4) 특정 커밋으로 되돌리기 - git reset 커밋 해시
여러개의 버전을 만든 후에 특정 커밋으로 되돌아가보자.
주의할 점은 reset R2를 입력하면 R2 커밋을 리세하는 것이 아니라 최신 커밋을 R2로 리셋하는 것이다. 즉, R2 커밋을 삭제하는 것이 아니라 R2 커밋 이후에 만들었던 커밋을 삭제하고, R2 커밋으로 이동하겠다는 것이다.
$ git reset --hard 복사한 커밋 해시
5) 커밋 삭제하지 않고 되돌리기 - git revert
커밋으로 되돌릴 때 수정한 것을 삭제해도 된다면 git reset 명령을 사용하면 되지만 나중에 사용할 것을 대비해서 컴시을 되돌리더라도 취소한 커밋을 남겨두어야 할 때가 있다. 이때 사용하는 것이 git revert 명령이다.
$ git revert 취소할 커밋 해시
R5 커밋이 사라지지 않고 R5를 취소한 새 커밋을 만드는 것이다. 이렇게 되면 R5 커밋이 삭제되지 않고 취소만 된다.
'Development > Git' 카테고리의 다른 글
5장. 깃허브로 협업하기 - 원격 저장소 사용하기 (0) | 2020.02.07 |
---|---|
4장. 깃허브로 백업하기 (0) | 2020.02.06 |
깃허브 origin 삭제하는 방법 (0) | 2020.02.05 |
3장. 깃과 브랜치 (0) | 2020.02.02 |
1장. 깃 시작하기 (2) | 2020.02.02 |