Git & GitHub

깃 버전 관리하기 - 버전 생성과 되돌리기

Player-Hyeok 2024. 2. 7.

이전 글에서 깃 저장소 생성과 버전 생성하는법을 알아보았다.

 

2024.02.06 - [Git & GitHub] - 깃으로 버전 관리하기 - Git 저장소 및 버전 만들기

 

깃으로 버전 관리하기 - Git 저장소 및 버전 만들기

깃에서는 문서를 수정할 때마다 간단한 메모와 함께 수정 내용을 스냅숏으로 찍어서 저장한다. 이 개념을 '버전'이라고 하는데, 깃의 백업 기능과 협업 기능은 이러한 버전 관리로부터 비롯된다

godsgift.tistory.com

 

기본적인 명령어를 공부하고 있었는데, 버전 생성에 이어 버전 관리에 대해 본격적으로 이어 작성하려고 한다.

깃 버전 관리하기
깃 버전 관리하기

 

버전 만드는 단계마다 파일 상태 알아보기

깃에서는 버전을 만드는 단계마다 파일 상태가 달라진다. 따라서 파일 상태를 이해하면 버전 관리의 단계 중 어디에 해당하고, 어떤 일을 할 수 있는 지 알 수 있다.

 

tracked 파일과 untracked 파일

git status 명령 시 작업 트리에 있는 파일은 tracked 상태와 untracked 상태로 나뉜다. 각각이 의미하는 바를 알아보자.

1) vim hello - 숫자 '3' 추가 후 저장 

2) vim hello2.txt : hello2 새로운 파일 생성

3) hello2 에 한 줄에 하나씩 a,b,c,d 를 입력 후 저장, 종료

4) git status 로 상태 확인 (Changes not staged for commit : modified - hello.txt, Untracked files : hello2.txt)

  • 한 번이라도 수정했던 파일(hello.txt)은 이력을 계속 추적하고 있으므로 tracked file 이며 수정 사항 여부를 표시함.
  • 처음 만드는 파일은 추적할 수 없음(hello2.txt)

5) gid add hello.txt, git add hello2.txt : git add 명령으로 스테이지에 파일 2개 모두 업로드

6) git status 확인 : Changes to be committed: modified(hello.txt), new file(hello2.txt)

7) git commit -m "message3" : 커밋

8) git log : message3 이라는 커밋은 보이지만, 각 커밋에 어떤 파일이 관련되어 있는지는 확인 불가능함

9) git log --stat : statics 통계 단축키를 붙이면 커밋에 관련된 이력을 표시해줌.

* .gitignore 파일로 버전 관리에서 제외하기
한 디렉터리 안에서 버전 관리를 하지 않을 파일이나 디렉터리가 있을 경우, .gitignore 파일을 만들어 목록을 지정하면 버전 관리를 하지 않는다. 주로 개인이 메모해 놓은 파일이나 자동으로 만들어진 swp 파일, 백업 파일 등을 지정해 놓는다.

vim .gitignore
해서 순서대로 지정하면 됨. ex) mynote.txt, temp/, .swp

 

 

unmodified, modified, stage 상태

파일이 tracked 된 상태라면 파일이 현재 작업 트리에 있는지, 스테이지에 있는지 등 더 구체적인 상태를 알아볼 수 있다.

 

1) ls -la : 디렉터리 살펴보기 (숨긴 파일까지 모두)

2) git status : 깃의 상태와 파일 상태 확인, working tree clean 일 경우 모든 파일의 상태가 unmodified 라는 뜻.

3) hello2.txt 파일 수정(a 만 남기고 모두 삭제)

4) git status : Changes not stage for commit 인 경우 modified 된 상태

5) git add hello2.txt : 스테이지에 올리기

6) git status : Changed to be committed 는 커밋 직전 단계, staged 상태

7) git commit -m "delet b,c,d"

8) git status : working tree clean

 

이처럼, git status 명령어를 통해 파일의 상태를 확인할 수 있다.

 

 

방금 커밋한 메세지 수정하기

커밋 메세지를 잘못 입력했다면 즉시 수정이 가능하다

1) git commit --amend 

2) 커밋 메세지가 뜨는데, I 를 눌러 입력 모드로 바꾸어 메세지를 수정

3) esc 눌러서 ex 모드로 들어간 후 :wq 로 저장 후 종료하면 된다.

 

작업 되돌리기

작업 트리에서 수정한 파일 되돌리기 - git restore

소스 수정 중 문제가 생겨 수정한 것을 취소하고 가장 최신 버전으로 되돌릴 때 사용

1) vim hello.txt - 3 삭제 후 three 입력

2) git status : hello.txt 는 수정되었지만 스테이지에 올라가 있지 않음. git add <file> or git restore<file> 을 제시함.

3) git restore hello.txt

4) git status : working tree clean 상태임을 확인

5) cat hello.txt 로 3 으로 되어있는지 내용 확인

 

스테이징 되돌리기 - git restore --staged

수정한 파일을 이미 스테이징까지 하였을 때, 이를 취소하는 방법

1) vim hello2.txt - 기존 내용 다 삭제 후 A,B,C,D 입력

2) git add hello2.txt

3) git status - modified hello2.txt 되어 있음, unstage 시에는 restore --staged <file> 사용하라고 제시됨.

4) git restore --staged hello2.txt : changed not staged for commit 상태로 변경되어 있음

 

최신 커밋 되돌리기 - git reset HEAD^

수정된 파일을 스테이징하고 커밋까지 하였을 때, 가장 마지막에 한 커밋을 취소하는 방법이다.

이 경우 커밋과 스테이징이 모두 취소된다.

1) vim hello2.txt - 대문자 E를 추가

2) git commit -am "message4" : -am 은 스테이징+커밋+메세지 까지 하는 명령어

3) git log : 커밋 여부 확인 (message4 유무로 확인)

4) git reset HEAD^ : Unstaged changes after reset 문구를 확인할 수 있음

5) git log : 커밋 취소 여부 확인(message4 없어졌는지 확인)

* git reset --soft HEAD^ 커밋 취소하고 파일을 staged 상태로 작업 디렉터리에 보관

* git reset --mixed HEAD^ 커밋 취소하고 파일은 unstaged 상태로 작업 디렉터리에 보관

* git reset HEAD^ mixed 와 동일한 효과

 

특정 커밋으로 되돌리기 - git reset 해시

git reset HEAD^ 는 최신 버전으로 커밋을 돌리는 것인데, 특정 버전으로 되돌려 놓고 이후 버전을 삭제할 수도 있다. 

reset + 커밋 해시를 통해 특정 버전으로 되돌려 보자.

1) vim rev.txt : 새로운 예제 파일 생성, 영문자 a 입력 후 저장

2) git add rev.txt : 스테이지에 올리기

3) git commit -m "R1" : 커밋

4) vim rev.txt : 영문자 b 를 추가하여 파일 수정

5) git commit -am "R2"

6) 동일 방법으로 2번 반복하여 영문자 c,d 추가(R3, R4)

7) git log : R1~R4 까지 있는지 확인

8) git reset --hard 복사한 커밋 해시(R2) : Head is now at 해시 messege(R2)

9) git log : R2 로 돌아갔음을 확인

10) cat rev.txt 로 a,b 만 있는 R2 버전인지 확인

깃 로그가 너무 길 경우 한 화면씩 표시되고, 마지막에 : 가 표시된다.
이 때 깃 창에 커서가 없어지는데, Q 키를 누르면 다시 커서가 표시된다.

 

 

커밋 변경 이력 취소하기 - git revert

특정 커밋으로 되돌릴 때 수정했던 것을 삭제하려면 git reset 을 사용한다.

여기서 나중에 사용할 것을 대비하여 커밋을 취소하더라도 기록은 남겨두고 싶으면 사용하는 것이 git revert 이다.

1) vim rev.txt - 영문자 e 추가해서 한번 더 수정

2) git commit -am "R5" : R5 로 메시지와 함께 커밋

3) git log : log 확인 시 R1, R2, R5 가 있을 것

4) git revert 커밋 해시(R5) : R5 취소하고 R2 로 가는데, R5 기록은 남겨 둘 것

5) 기본 편집기가 자동으로 나타나면서 커밋 메시지를 입력할 수 있게 됨. I 눌러서 메세지 남기고 esc, :wq 로 나오기

6) git log : R5는 있지만 메세지는 보류되었음. this reverts commit 이런식으로 메세지 남아 있음

7) cat rev.txt : R2 인 a,b 만 있는지 확인

 

 

 

 

 

댓글

💲 추천