깃에서는 문서를 수정할 때마다 간단한 메모와 함께 수정 내용을 스냅샷으로 찍어서 저장 ⇒ 버전
1. 깃 저장소 만들기
1-1. 깃 초기화하기 — git init
1) 깃 저장소를 만들 디렉토리 생성
$ mkdir hello-git
$ cd hello-git
$ ls -la
total 0 # 아직 아무 파일도 없음
drwxr-xr-x@ 2 jieunpark staff 64 9 30 11:44 . # 현재 디렉토리
drwxr-xr-x@ 34 jieunpark staff 1088 9 30 11:44 .. # 상위 디렉토리
2) 저장소 생성
- 디렉토리에 저장소를 만들기 위해
git init
으로 디렉토리 초기화 .git
디렉토리가 깃을 사용하며 버전이 저장될 저장소(repository)
$ git init
/Users/jieunpark/Desktop/Archive/hello-git/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다
$ ls -la
total 0
drwxr-xr-x@ 3 jieunpark staff 96 9 30 11:48 .
drwxr-xr-x@ 34 jieunpark staff 1088 9 30 11:48 ..
drwxr-xr-x@ 9 jieunpark staff 288 9 30 11:48 .git # .git 디렉토리는 감춰져있음
2. 버전 만들기
깃에서 버전을 관리하면 파일 이름은 그대로 유지하며 파일에서 무엇을 변경했는지 변경 시점마다 저장할 수 있음
또 각 버전마다 작업했던 내용을 확인할 수 있고, 그 버전으로 되돌아갈 수도 있음
2-1. 스테이지와 커밋 이해하기

작업 트리 (working tree / working directory)
- 파일 수정, 저장 등의 작업을 하는 디렉토리
- 우리 눈에 보이는 디렉토리
- ex. hello-git 디렉토리
스테이지 (stage)
- 버전으로 만들 파일이 대기하는 곳, 스테이징 영역 (staging area)
.git/index
파일에 저장- ex. 작업 트리에서 10개의 파일을 수정했는데 4개의 파일만 버전으로 만드려면 4개의 파일만 스테이지로 넘겨주면 됨
저장소 (repository)
- 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
./git/HEAD
파일에 저장
2-2. 깃이 버전을 만드는 과정
1) 작업 트리에서 문서 수정
hello.txt
파일 문서를 수정하고 저장하면 그 파일은 작업 트리에 있게 됨
2) 수정한 파일 중 버전으로 만들고 싶은 것을 스테이지에 저장
- 수정한
hello.txt
파일을 버전으로 만들고 싶을 때 스테이지에 넣음 - 다른 파일도 수정한 뒤 버전으로 만들겠다면 스테이지에 넣어둠

3) 스테이지에 있던 파일을 저장소로 커밋
- 파일 수정을 끝내고 스테이지에 다 넣으면 버전을 만들기 위해 깃에게 commit 명령을 내림
- commit 명령을 내리면 새로운 버전이 생성되며 스테이지에 대기하던 파일이 모두 저장소에 저장됨

2-3. 작업 트리에서 VIM으로 문서 수정하기
깃 상태 확인
$ git status
현재 브랜치 master
아직 커밋이 없습니다
커밋할 사항 없음 (파일을 만들거나 복사하고 "git add"를 사용하면 추적합니다)
새로운 파일 생성 후 깃 상태 확인
현재 브랜치 master
아직 커밋이 없습니다
추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
hello.txt
커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git
add"를 사용하십시오)
- untracked files: 아직 한 번도 버전 관리하지 않은 파일
2-4. 수정한 파일을 스테이징 하기 — git add
- 작업 트리에서 파일을 생성 및 수정 후 스테이지에 수정한 파일 추가
- 스테이징(staging): 깃에게 버전 만들 준비를 하라고 알려주는 것
- 스테이징 내용을
.git/index
파일에 저장 (= 인덱스에 등록)
$ git add hello.txt
$ git status
현재 브랜치 master
아직 커밋이 없습니다
커밋할 변경 사항:
(스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
새 파일: hello.txt
- 새 파일
hello.txt
를 앞으로 커밋할 것이라는 뜻
2-5. 스테이지에 올라온 파일 커밋하기 — git commit
- 파일이 스테이지에 있다면 이제 버전을 만들 수가 있음
- 깃에서는 버전을 만드는 것을 commit한다고 말함
- commit할 때는 그 버전에 어떤 변경 사항이 있었는지 확인하기 위해 메시지를 함께 기록
커밋 메시지
$ git commit -m 'message1'
[master (최상위-커밋) 5fe650e] message1
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
(base) jieunpark@JieunuicBookPro hello-git % git status
현재 브랜치 master
커밋할 사항 없음, 작업 폴더 깨끗함
- 파일 1개가 변경되었고, 파일에 1개의 내용이 추가되었다고 나타냄
- 스테이지에 있던
hello.txt
파일이 저장소에 추가
버전 확인
$ git log
commit 5fe650ebd2300f8a842cb07b051d5900bef9662a (HEAD -> master)
Author: Jieun-Enna <fornanaa@gmail.com>
Date: Fri Sep 30 14:34:42 2022 +0900
message1
- 방금 커밋한 버전에 대한 설명이 나타남
- 커밋을 만든 사람, 만든 시간, 커밋 메시지
2-6. 스테이징과 커밋 한꺼번에 처리하기 — git commit -am
- commit 명령에
-am
옵션을 사용하면 스테이지에 올리고 커밋하는 과정을 한꺼번에 처리 (-a -m
도 가능) - 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용할 수 있음
$ git commit -am 'message2'
commit cde1f9dbab22f52b7ceac6030b78b3a6d5b96b76 (HEAD -> master)
Author: Jieun-Enna <fornanaa@gmail.com>
Date: Fri Sep 30 14:43:14 2022 +0900
message2
commit 5fe650ebd2300f8a842cb07b051d5900bef9662a
Author: Jieun-Enna <fornanaa@gmail.com>
Date: Fri Sep 30 14:34:42 2022 +0900
message1
3. 커밋 내용 확인하기
3-1. 커밋 기록 자세히 살펴보기 — git log
- 지금까지 커밋했던 기록을 살펴보기 위한 명령
- 지금까지 만든 버전이 화면에 나타나고, 각 버전마다 설명도 함께 나타남
커밋 로그

- 커밋 해시 (commit hash) / 깃 해시 (git hash): 커밋을 구별하는 아이디
HEAD -> master
: 이 버전이 가장 최신이라는 표시Author
: 버전을 누가 만들었는지Date
: 버전이 언제 만들어졌는지- 커밋 메시지
3-2. 변경 사항 확인하기 — git diff
- 소스 코드를 수정한 다음 저장소에 있느 최근 버전과 비교해서 어떤 부분이 다른지 찾아야하는 경우
- 커밋 메시지를 참고해도 구체적으로 어디가 어떻게 수정되었는지 파악하기가 어려움
git diff
명령을 사용하여 작업 트리에 있는 파일과 스테이지에 있는 파일을 비교하거나, 스테이지에 있는 파일과 저장소에 있는 최신 커밋을 비교해서 수정한 파일을 커밋하하기 전에 최종적으로 검토
git diff
hello.txt
수정 후 깃 상태 확인hello.txt
파일이 수정되었고, 아직 스테이징 상태가 아니라고 나옴$ git status 현재 브랜치 master 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: hello.txt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
- 수정한
hello.txt
파일이 저장소에 있는 최신 버전의hello.txt
와 어떻게 다른지 확인 $ git diff diff --git a/hello.txt b/hello.txt index 1191247..0b66db0 100644 --- a/hello.txt +++ b/hello.txt @@ -1,2 +1,2 @@ 1 -2 # 최신 버전과 비교할 때 hello.txt 파일에서 '2'가 삭제됨 +two # hello.txt 파일에 'two'라는 내용이 추가됨
- 수정한 내용으로 다시 버전을 만드려면 스테이지에 올린 후 커밋
- 수정한 내용을 버리려면
git checkout
명령으로 수정 내용 취소
4. 버전 만드는 단계마다 파일 상태 알아보기
깃에서는 버전을 만드는 각 단계마다 파일 상태를 다르게 표시
⇒ 파일의 상태를 이해하면 이 파일이 버전 관리의 여러 단계 중 어디에 있는지, 그 상태에서 어떤 일을 할 수 있는지 알 수 있음
4-1. tracked 파일과 untracked 파일
- 작업 트리에 있는 파일은 크게 tracked 상태와 untracked 상태로 나뉨
hello.txt
파일을 수정하고hello2.txt
파일을 새로 생성한 경우커밋하도록 정하지 않은 변경 사항
: 변경된 파일이 아직 스테이지에 올라가지 않았음수정함
:hello.txt
파일이 수정됨- ⇒ 이렇게 깃은 한 번이라도 수정된 파일의 수정 여부를 계속 추적함 - tracked 파일
추적하지 않는 파일
:hello2.txt
파일은 한 번도 깃에서 버전 관리를 하지 않았기 때문에 수정 내역을 추적하지 않음 - untracked 파일
$ git status 현재 브랜치 master 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: hello.txt 추적하지 않는 파일: (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오) hello2.txt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
- 수정했던
hello.txt
파일과hello2.txt
파일은 모두git add
명령을 사용해서 스테이지에 올릴 수 있음git add
명령 뒤에 파일 이름 대신 마침표(.
)를 붙이면 작업 트리에서 수정한 파일들을 한꺼번에 스테이지에 올릴 수 있음- 마지막 버전 이후에 수정된
hello.txt
는수정함:
으로 표시됨 - 한 번도 버전 관리하지 않았던
hello2.txt
는새 파일:
로 표시됨 - tracked 파일이나 untracked 파일 모두 스테이지에 올라온 것을 확인
$ git status 현재 브랜치 master 커밋할 변경 사항: (use "git restore --staged <file>..." to unstage) 수정함: hello.txt 새 파일: hello2.txt
- 해당 커밋에는
hello.txt
를 수정한 내용과 새로 만든hello2.txt
내용이 다 포함됨- 그러나 각 커밋에 어떤 파일들이 관련된 것인지 알 수 없음
$ git commit -m 'message3' $ git log commit e5cd7374d72ef6149be95b24984fced78018d034 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 15:44:55 2022 +0900 message3 commit cde1f9dbab22f52b7ceac6030b78b3a6d5b96b76 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:43:14 2022 +0900 message2 commit 5fe650ebd2300f8a842cb07b051d5900bef9662a Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:34:42 2022 +0900
- 커밋에 관련된 파일까지 함께 살펴보려면
git log
명령에—-stat
옵션을 사용- 로그 메시지가 너무 많은 경우 한 화면씩 나누어 보여줌
Enter
→ 다음 로그 화면Q
→ 로그 화면을 빠져나와 다시 깃 명령 입력 가능
- 로그 메시지가 너무 많은 경우 한 화면씩 나누어 보여줌
$ git log --stat commit e5cd7374d72ef6149be95b24984fced78018d034 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 15:44:55 2022 +0900 message3 hello.txt | 1 + hello2.txt | 4 ++++ 2 files changed, 5 insertions(+) commit cde1f9dbab22f52b7ceac6030b78b3a6d5b96b76 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:43:14 2022 +0900 message2 hello.txt | 1 + 1 file changed, 1 insertion(+) commit 5fe650ebd2300f8a842cb07b051d5900bef9662a Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:34:42 2022 +0900 message1 hello.txt | 1 + 1 file changed, 1 insertion(+)
.gitignore
파일로 버전 관리에서 제외하기
- 버전 관리 중인 디렉토리 안에서 버전 관리를 하지 않을 특정 파일 또는 디렉토리가 있다면
.gitignore
파일을 만들어 목록을 지정할 수 있음 - VIM을 사용해서
.gitignore
파일을 만들어 그 안에 버전 관리하지 않을 파일 또는 디렉토리 이름이나 파일 확장자를 입력- ex. 개인적으로 메모해 놓은 파일이나 프로그램 사용중에 자동으로 생성된 swp 파일, 백업 파일 등
- ex.
mynote.txt
파일,temp
디렉토리, 확장자가.swp
인 파일을 버전 관리에서 제외 # .gitignore 파일 내용 mynote.txt temp/ .swp
4-2. unmodified, modified, staged 상태
- tracked 상태인 파일은 깃 명령으로 파일 상태를 확인하면 현재 작업 트리에 있는지, 스테이지에 있는지 등 더 구체적인 상태를 알려줌
- 작업 트리에 아무 변경 사항도 없음
- working tree clean: 현재 작업 트리에 있는 모든 파일은 수정되지 않은 unmodified 상태
$ git status 현재 브랜치 master 커밋할 사항 없음, 작업 폴더 깨끗함
hello2.txt
를 수정한 이후의 깃 상태커밋하도록 정하지 않은 변경 사항 (Changes not staged for commit)
: 파일이 수정만 된 modified 상태
$ git status 현재 브랜치 master 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: hello2.txt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
- git add 명령을 사용해 스테이지에 올리고 git status 명령을 실행
커밋할 변경 사항 (Changes to be commited)
- 커밋할 변경사항이 있음, 커밋 직전 단계, staged 상태
$ git add hello2.txt $ git status 현재 브랜치 master 커밋할 변경 사항: (use "git restore --staged <file>..." to unstage) 수정함: hello2.txt
- 스테이지에 있는
hello2.txt
파일 커밋 후git status
명령 실행- 커밋을 끝내고 난 후 hello2.txt 파일의 상태는 수정이 없던 unmodified로 돌아감
$ git commit -m 'delete b, c, d' $ git status 현재 브랜치 master 커밋할 사항 없음, 작업 폴더 깨끗함

방금 커밋한 메시지 수정하기
- 문서의 수정 내용을 기록해둔 commit message를 잘못 입력한 경우, 커밋을 만든 즉시 commit message를 수정할 수 있음
- 가장 최근의 커밋 메시지를 수정하려면
git commit
명령에—-amend
를 붙임 - 명령을 입력하면 기본 편집기인 VIM이 실행되며 원래 커밋 메시지가 화면 위쪽에 나타남
5. 작업 되돌리기
5-1. 작업 트리에서 수정한 파일 되돌리기 — git checkout
(git restore
)
- 파일을 수정한 뒤 소스가 정상적으로 동작하지 않는 등의 이유로 수정한 내용을 취소하고 가장 최신 버전 상태로 되돌려야 할 때
checkout
명령을 사용하면 작업 트리에서 수정한 내용을 쉽게 취소할 수 있음checkout
으로 되돌린 내용은 다시 복구할 수 없음- 파일 수정 후 깃의 상태 (1 2 3 ⇒ 1 2 three)
hello.txt
가 수정되었지만 아직 스테이지에 올라가있지 않음use "git restore <file>..." to discard changes in working directory
- 교재에서는
restore
대신checkout
을 사용하지만, Git 2.23에서checkout
을 대신할switch
,restore
가 도입되었고,git -—help
에도 이젠checkout
명령어가 나오지 않음 - 작업 트리(디렉토리)의 변경 사항을 취소하려면
checkout
(restore
) 사용
- 교재에서는
$ git status 현재 브랜치 master 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: hello.txt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
git checkout —- 파일 이름
$ git checkout -- hello.txt $ cat hello.txt 1 2 3
새 버전에 맞게 git checkout
대신 switch
/ restore
사용하기
checkout | switch branches or restore working tree files |
---|---|
switch | switch branches |
restore | restore working tree files |
git switch
checkout
에서 브랜치를 변경하는 부분만 담당git checkout <BRANCH_NAME>
: 브랜치 전환$ git swtich develop 'develop' 브랜치로 전환합니다 브랜치가 'upstream/develop'에 맞게 업데이트된 상태입니다
git checkout -b <BRANCH_NAME>
: 내가 많이 사용하는 브랜치를 새로 만들면서 브랜치 변경$ git switch -c new-branch 새로 만든 'new-branch' 브랜치로 전환합니다
- ⇒
-c
옵션으로 똑같이 사용 가능 - 브랜치를 어디서 만들지는 지정하지 않았으므로
HEAD
가 사용되었는데, 특정 브랜치나 커밋에서 새로운 브랜치를 만들고 싶으면 브랜치 이름 뒤에 커밋 지정 $ git switch -c new-branch2 515c633a 새로 만든 'new-branch2' 브랜치로 전환합니다
git restore
- 작업 트리의 파일 복원
- 파일의 수정 내용을 복원하려면
git checkout — README.md
처럼 사용했는데 이제 다음과 같이 사용 $ git restore README.md
git add
를 통해서 수정 내용을 stage에 이미 넣었을 때 이를 다시 빼려면git reset HEAD README.md
를 사용했는데 이 부분도restore
로 들어옴- 수정 사항을 빼고 조작할 때 모두
restore
로 통일 $ git restore --staged README.md
5-2. 스테이징 되돌리기 — git reset HEAD 파일 이름
(git restore
)
- 수정된 파일을 스테이징했을 때, 스테이징을 취소
- 파일 수정 & 스테이지에 올린 후 깃의 상태 (a ⇒ A B C D)
- 스테이지에서 내리려면(
to unstage
)reset HEAD
명령을 사용하라고 함 (restore
)
- 스테이지에서 내리려면(
$ git add hello2.txt $ git status 현재 브랜치 master 커밋할 변경 사항: (use "git restore --staged <file>..." to unstage) 수정함: hello2.txt
git reset
(git restore
) 명령을 사용해 스테이지에서hello2.txt
를 내리기HEAD
다음에 파일 이름을 지정하지 않으면 스테이지에 있는 모든 파일을 되돌림$ git reset HEAD hello2.txt 리셋 뒤에 스테이징하지 않은 변경 사항: M hello2.txt
- 수정된
hello2.txt
가 스테이지에서 내려졌다는(unstage
) 메시지가 나타남
reset
이후 깃의 상태- 파일이 아직 스테이지에 올라가기 전(
not staged
)로 돌아옴 - 파일의 수정사항은 아직 반영되어있음, 수정사항도 되돌리려면
restore
해야함
- 파일이 아직 스테이지에 올라가기 전(
$ git status 현재 브랜치 master 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: hello2.txt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
5-3. 최신 커밋 되돌리기 — git reset HEAD^
- 수정된 파일을 스테이징하고 커밋까지 했을 때, 가장 마지막에 한 커밋을 취소
- 파일 수정 후
git commit
명령을 사용해 스테이징과 커밋 함께 실행 (a ⇒ A B C D E, ‘message4’) git log
명령을 사용하면 커밋 메시지가 ‘message4’인 커밋을 확인할 수 있음$ git log commit 37b48e561c8c0c2d0095e16fce5155296322c1b1 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:15:10 2022 +0900 message4 commit 0825db65a6f5a47c816583acb70495a95ad35057 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 18:33:15 2022 +0900 delete b, c, d - modify commit message commit e5cd7374d72ef6149be95b24984fced78018d034 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 15:44:55 2022 +0900 message3 commit cde1f9dbab22f52b7ceac6030b78b3a6d5b96b76 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:43:14 2022 +0900 message2 commit 5fe650ebd2300f8a842cb07b051d5900bef9662a Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:34:42 2022 +0900 message1
- 최신 커밋을 되돌리려면
git reset HEAD^
HEAD^
: 현재 HEAD가 가리키는 브랜치의 최신 커밋git log
를 실행하면 가장 최신 커밋에HEAD -> master
표시가 있는데, 이를 되돌리면 커밋도 취소되고 스테이지에서도 내려지고, 작업 트리에만 남게 됨$ git reset HEAD^ 리셋 뒤에 스테이징하지 않은 변경 사항: M hello2.txt
- 깃 상태 확인
- 메시지가 ‘message4’인 커밋이 사라짐
- 이 방법으로 커밋을 취소하면 이 커밋 전에 했던 스테이징도 함께 취소됨
$ git log commit 0825db65a6f5a47c816583acb70495a95ad35057 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 18:33:15 2022 +0900 delete b, c, d - modify commit message commit e5cd7374d72ef6149be95b24984fced78018d034 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 15:44:55 2022 +0900 message3 commit cde1f9dbab22f52b7ceac6030b78b3a6d5b96b76 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:43:14 2022 +0900 message2 commit 5fe650ebd2300f8a842cb07b051d5900bef9662a Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 14:34:42 2022 +0900 message1
git reset
명령의 옵션
reset
명령은 사용하는 옵션에 따라 되돌릴 수 있는 단계가 다름
--soft HEAD^ | 최근 커밋을 하기 전 상태로 작업 트리를 되돌림 |
---|---|
--mixed HEAD^ | 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌림 (default) |
--hard HEAD^ | 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌림 |
이 옵션으로 되돌린 내용은 복구할 수 없음 |
5-4. 특정 커밋으로 되돌리기 — git reset 커밋 해시
git reset HEAD^
는 최신 커밋으로 되돌리지만, 특정 버전으로 되돌린 다음 그 이후 버전을 삭제할 수도 있음git reset 커밋 해시
- VIM을 사용해 rev.txt를 만들고, a(’R1’) b(’R2’) c(’R3’) d(’R4’)를 추가하고 커밋하는 과정을 반복하여 파일 수정과 커밋을 반복
$ git log commit 2b4b6946f402827189ed845943bd18948b000245 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:37:36 2022 +0900 R4 commit 7e85c2d86602a6e93b1e219df5fb2a8d5cc095cd Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:37:12 2022 +0900 R3 commit 5e818638e70de7e27576d9cae3528720ea2e13b5 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:34 2022 +0900 R2 commit 9817b9f52300633933dab0b1065aa59b0e12d362 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:10 2022 +0900 R1
- R4 메시지가 있는 커밋을 R4 커밋으로, R3 메시지가 있는 커밋을 R3으로 부름
- 4개의 커밋 중 R2라는 메시지가 붙은 커밋으로 되돌리기 (R2 메시지가 있는 커밋을 최신 커밋으로)
git log
명령의 결과 화면에서 R2 커밋의 커밋 해시를 복사$ git reset —-hard 5e818638e70de7e27576d9cae3528720ea2e13b5 HEAD의 현재 위치는 5e81863입니다 R2
- 복사해서 붙인 커밋이 가장 최신 커밋이 됨
- 깃 상태 확인
- R4와 R3의 메시지가 있던 커밋은 삭제되고 R2가 최신 커밋이 됨
$ git log commit 5e818638e70de7e27576d9cae3528720ea2e13b5 (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:34 2022 +0900 R2 commit 9817b9f52300633933dab0b1065aa59b0e12d362 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:10 2022 +0900 R1
rev.txt
내용 확인$ cat rev.txt a b
- reset에서 커밋 해시를 사용해 되돌릴 때 주의점
reset A
를 입력한다면 이 명령은 A 커밋을 리셋하는 것이 아니라 최근 커밋을 A로 리셋함- == A 커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고, A 커밋으로 이동
5-5. 커밋 삭제하지 않고 되돌리기 — git revert
- 커밋으로 되돌릴 때 수정했던 것을 삭제해도 된다면 git reset 명령을 사용하면 되지만, 나중에 사용할 것을 대비해서 커밋을 되돌리더라도 취소한 커밋을 남겨두어야 함
- ⇒
git reset
대신git revert
- 파일 수정 및 커밋 후 깃 상태 확인 (a b ⇒ a b e (’R5’))
$ git log commit b904b138fdecc45f63d0c77a38c9abb0ccfbccfa (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:51:21 2022 +0900 R5 commit 5e818638e70de7e27576d9cae3528720ea2e13b5 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:34 2022 +0900 R2 commit 9817b9f52300633933dab0b1065aa59b0e12d362 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:10 2022 +0900 R1
- 가장 최근에 커밋한 R5 버전을 취소하고, R5 직전 커밋 R2로 돌아가기
revert
의 경우 revert 명령 뒤에 취소하려고 하는 버전의 커밋 해시 지정git revert 취소할 커밋 해시
Revert "R5" This reverts commit b904b138fdecc45f63d0c77a38c9abb0ccfbccfa. # 변경 사항에 대한 커밋 메시지를 입력하십시오. '#' 문자로 시작하는 # 줄은 무시되고, 메시지를 입력하지 않으면 커밋이 중지됩니다. # # 현재 브랜치 master # 커밋할 변경 사항: # 수정함: rev.txt
$ git revert b904b138fdecc45f63d0c77a38c9abb0ccfbccfa
- 깃을 설치할 때 지정했던 기본 편집기가 자동으로 나타나며 커밋 메시지 입력 가능
- 커밋 메시지 맨 위에는 어떤 버전을
revert
했는지 나타나있음 - 문서 맨 위에
revert
하며 추가로 남겨둘 내용이 있다면 입력하고 저장 [master 917f21e] Revert "R5" 1 file changed, 1 deletion(-)
- 깃 상태 확인
$ git log commit bcc9af193b87030172be19771aef889ca1d756bb (HEAD -> master) Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 22:01:31 2022 +0900 Revert "R5" 일시적으로 커밋 보류함. This reverts commit ce478d60ec7d80a4cec32e0e3f9eb9eb97be1025. commit b904b138fdecc45f63d0c77a38c9abb0ccfbccfa Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:51:21 2022 +0900 R5 commit 5e818638e70de7e27576d9cae3528720ea2e13b5 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:34 2022 +0900 R2 commit 9817b9f52300633933dab0b1065aa59b0e12d362 Author: Jieun-Enna <fornanaa@gmail.com> Date: Fri Sep 30 21:36:10 2022 +0900 R1
rev.txt
확인- 앞에서 추가했던 ‘e’가 없어짐
- 이렇게
revert
명령을 사용하면 버전에 있던 이력을 취소할 수 있음
$ cat rev.txt a b

출처
- Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문
'Development > Git & Github' 카테고리의 다른 글
01. 깃(Git) 시작하기 (0) | 2023.02.17 |
---|