02. GIT으로 버전 관리하기

2020. 1. 23. 05:57GIT

깃 저장소 만들기

깃 초기화하기

  git init


버전 만들기

작업트리 스테이지 저장소
     

1. 작업 트리(working tree) 혹은 작업 디렉터리(working directory)

  파일 수정, 저장 등의 작업을 하는 디렉터리. 우리 눈에 보이는 디렉터리가 작업 트리입니다.

 

2. 스테이지(stage) 혹은 스테이징 영역(staging area)

  버전으로 만들 파일이 대기하는 곳. 

 

3. 저장소(repository)

  스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳.

 

 

  스테이지와 저장소는 눈에 보이지 않습니다. 깃을 초기화할때 .git 디렉터리가 만들어지는데 이 안에 숨은 파일 형태로 존재하는 영역입니다. 깃이 버전을 만드는 과정을 살펴보겠습니다.

 

hello.txt 파일 문서를 수정하고 저장하면 그 파일은 작업 트리에 있게 됩니다.

작업트리 스테이지 저장소
hello.txt    

hello.txt. 파일을 버전으로 만들고 싶을 때 스테이지에 넣습니다.

작업트리 스테이지 저장소
hello.txt hello.txt  

파일 수정을 끝내고 스테이지에 다 넣었다면 버전을 만들기 위해 깃에게 커밋(commit) 명령을 내립니다. 커밋 명령을 내리면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장됩니다.

작업트리 스테이지 저장소
hello.txt   hello.txt

 

1. 작업 트리에서 빔으로 문서 수정하기

01. 깃 상태를 확인하기 위해 git status 명령을 입력합니다.

git status

02. 깃의 상태를 나타내는 메시지

  On branch master : 현재 master 브랜치에 있습니다.

  No commits yet: 아직 커밋한 파일이 없습니다.

  nothing to commit: 현재 커밋할 파일이 없습니다.

 

03. 새로운 파일을 만들어 봅니다.

  vim hello.txt

 

04. 문서 내용에 숫자 1을 입력하고 문서를 저장한 뒤 편집기를 종료합니다.

 

05. ls -la 명령을 입력하면 방금 만든 hello.txt 파일이 디렉토리 안에 생성된 것을 볼 수 있습니다.

 

06. 다시 git status를 입력해보면 다른 메시지가 나타납니다.

git status 2

hello.txt라는 Untracked files가 존재한다고 합니다. 깃에서는 한 번도 버전 관리하지 않은 파일을 untracked files라고 부릅니다.

 

2. 수정한 파일을 스테이징하기

  작업 트리에서 파일을 만들거나 수정했다면 스테이지에 수정한 파일을 추가합니다. 이렇게 깃에게 버전 만들 준비를 하라고 알려주는 것을 '스테이징(staging)' 또는 '스테이지에 올린다'라고 표현합니다.

 

01. 스테이징할 때 사용하는 명령은 git add 입니다.

  git add hello.txt

 

02. 다시 깃 상태를 확인해봅시다. git status

 

03. untracked files 라는 문구가 changes to be committed로 바뀐 것을 볼 수 있습니다. 그리고 new file: hello.txt로써 new file이라는 수식어가 추가되었는데 새 파일 hello.txt를 커밋할 것이다라는 뜻을 갖습니다.

git add hello.txt

warning이 뜨는 이유
  깃에서 사용하는 명령은 리눅스를 기반으로 하고, 윈도우에서는 깃 배시 프로그램을 거쳐서 깃 명령을 사용합니다. 그래서 윈도우에서 깃을 사용할 때 윈도우 줄바꿈 문자와 리눅스 줄바꿈 문자는 다르기 때문에 경고메시지가 뜨게 되는 것입니다. 이 메시지는 깃에서 자동으로 텍스트 문서의 CRLF 문자를 LF 문자로 변환해서 커밋할 것이라는 의미이고 사용자가 따로 어떤 조치를 해야하는 것은 아니므로 메시지의 뜻만 이해하고 넘어가세요.

 

3. 스테이지에 올라온 파일 커밋하기

  파일이 스테이지에 있다면 이제 버전을 만들 수 있습니다. 깃에서 버전을 만드는 것은 '커밋(commit)한다'고도 말합니다. 커밋할 때 그 버전에 어떤 변경 사항이 있었는지 확인하기 위해 메시지를 함께 기록해 두어야 합니다.

 

01. 깃에서 파일을 커밋하는 명령은 git commit입니다. -m 옵션을 붙이면 커밋과 함께 저장할 메시지를 적을 수 있습니다.

  git commit -m "message1"

 

02. 커밋 후 결과 메시지를 보면 파일 1개가 변경되었고, 파일에 1개의 내용이 추가되었다고 나타납니다.

 

03. 깃 상태를 알아봅시다. git status

  버전으로 만들 파일이 없고(nothing to commit) 작업 트리고 수정사항 없이 깨끗하다(working tree clean)고 나타납니다.

 

04. 저장소에 저장된 버전을 확인할 때는 git log 명령을 사용합니다.

 

05. 방금 커밋한 버전에 대한 설명이 나타납니다.

git commit

 

4. 스테이징과 커밋 한꺼번에 처리하기

  commit 명령에 -am 옵션을 사용하면 스테이지에 올리고 커밋하는 과정을 한꺼번에 처리할 수 있습니다. 단, 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용할 수 있습니다.

 

01. 빔에서 hello.txt 파일을 열어 숫자 2를 추가합니다.

 

02. git commit -am "message2" (git commit -a -m "message2"라고 입력해도 됩니다.)

 

03. git log

 


커밋 내용 확인하기

1. 커밋 기록 자세히 살펴보기

git log 명령은 지금까지 커밋했던 기록을 살펴보기 위해 자주 사용되는 명령입니다.

git log

01. 커밋 해시(commit hash) 또는 깃 해시(git hash)

  commit aeed45f389efdc...... 커밋을 구별하는 아이디.

커밋 해시 옆에 (HEAD->master)는 이 버전이 가장 최신이라는 표시입니다.

 

02. 버전을 누가만들었는지

  Author

 

03. 버전이 언제 만들어졌는지

  Date

 

04. 커밋 메시지

  message2, message1 등

 

05. 커밋 로그

  git log 명령을 입력했을 때 나오는 정보.

 

2. 변경 사항 확인하기

  git diff

 

01. vim hello.txt해서 2를 지우고 two라고 입력한 후 저장하세요.

 

02. git status 명령을 입력하면 hello.txt 파일이 수정되었고, 아직 스테이징 상태가 아니라고 나옵니다. 

 

03. 방금 수정한 hello.txt 파일이 저장소에 있는 최신 버전의 hello.txt와 어떻게 다른지 확인해 보겠습니다.

  git diff

 

04. -2 : 2가 삭제됨

    +two : two라는 내용이 추가됨

git diff

 


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

  깃에서는 버전을 만드는 각 단계마다 파일 상태를 다르게 표시합니다. 

 

1. tracked 파일과 untracked 파일

01. hello.txt 파일을 열고 숫자 3을 추가한 후 저장합니다.

 

02. hello2.txt라는 새로운 파일을 만들고 a b c d를 한 줄에 한 글자씩 입력하고 파일을 저장한 후 편집기를 종료합니다.

 

03. git status 

  Changes not staged for commit: 변경된 파일이 아직 스테이지에 올라가지 않았다.

여기서 hello.txt 파일이 수정되었다는 것을 알 수 있고 이렇게 한 번이라고 커밋을 한 파일의 수정 여부를 계속 추적하기 때문에 tracked 파일이라고 부릅니다.

  Untracked files: 한 번도 깃에서 버전 관리를 하지 않았기 때문에 수정 내역을 추적하지 않습니다. 그래서 untracked 파일이라고 표시합니다. 

tracked files와 untracked files

 

04. 두 파일을 스테이지에 올리고 커밋을 합니다.

 

05. git log 명령만 입력하면 각 커밋에 어떤 파일들이 관련된 것인지 알 수 없으므로 --stat 옵션을 사용합니다.

  git log --stat

 

.gitignore 파일로 버전 관리에서 제외하기
  빔을 사용해서 .gitignore 파일을 만들어 그 안에 버전 관리하지 않을 파일 또는 디렉터리 이름이나 파일 확장자를 입력하면 됩니다. 주로 개인적으로 메모해 놓은 파일이나 프로그램 사용 중에 자동으로 생성된 swp 파일, 백업 파일 등이 이 목록에 포함됩니다. 예를 들어 다음과 같이 작성하면 mynote.txt 파일과 temp 디렉터리, 확장자가 .swp인 파일을 버전 관리에서 제외시킬 수 있습니다.
mynote.txt
temp/
.swp

 

2. unmodified, modified, staged 상태

  tracked 상태인 파일은 깃 명령으로 파일 상태를 확인하면 현재 작업 트리에 있는지, 스테이지에 있는지 등 더 구체적인 상태를 알려줍니다.

 

01. git status 명령을 사용하면 깃의 상태와 파일의 상태를 알 수 있습니다.

 

02. 현재 작업 트리에 아무 변경 사항이 없기 때문에 git status를 입력하면 working tree clean이라고 뜨고 이는 작업 트리에 있는 모든 파일의 상태는 unmodified, 즉 수정되지 않은 상태입니다.

 

03. hello2.txt 파일을 a만 남겨두고 저장합니다.

 

04. 다시 git status 명령을 실행하면 Changed not stage for commit에 hello.txt 파일이 modified 되었다고, 파일이 수정만 되었다고 알려줍니다.

 

05. git add 명령을 사용해 스테이지에 올리고 git status 명령을 실행해봅니다. Changes to be commited 라는 메시지가 나타나면 커밋 직전 단계, 즉 staged 상태입니다.

 

06. hello2.txt 파일을 커밋하고 git status 명령을 실행해보면 다시 unmodified로 돌아간 것을 볼 수 있습니다.

 

방금 커밋한 메시지 수정하기
  git commit --amend 명령을 입력하면 기본 편집기인 빔이 실행되면서 원래 커밋 메시지가 화면 위쪽에 나타나고 이를 수정하면 커밋 메시지를 수정할 수 있습니다.

 


작업 되돌리기

1. 작업 트리에서 수정한 파일 되돌리기

  git restore 

 

01. hello.txt 파일을 수정한 후 저장합니다.

 

02. git status를 해보면 작업 트리(디렉터리)의 변경 사항을 취소하려면 restore을 사용하라고 되어있습니다.

 

03. git restore hello.txt라고 입력하면 수정하기 전 상태로 돌아간 것을 확인할 수 있습니다.

 

2. 스테이징 되돌리기

  git reset HEAD 파일 이름

 

01. hello2.txt파일 내용을 수정한 후 저장하고 빔을 종료합니다.

 

02. git add 명령으로 hello2.txt 파일을 스테이지에 올립니다.

 

03. git reset HEAD hello2.txt라고 입력하면 스테이지에서 내려졌다는(unstaged) 메시지가 나타납니다.

 

3. 최신 커밋 되돌리기

  git reset HEAD^

 

01. 다시 hello2.txt 파일을 수정합니다.

 

02. git commit -am "message4" 명령을 실행하여 스테이징과 커밋을 함께 실행합니다.

 

03. git log 명령을 사용하면 커밋 메시지가 message4인 커밋을 확인할 수 있습니다.

 

04. git reset HEAD^를 입력하면 최신 커밋을 취소하고 스테이지에서도 내려집니다. 취소한 파일은 작업 트리에만 남습니다. HEAD^는 HEAD가 가리키는 브랜치의 최신 커밋을 의미합니다.

 

05. git log 명령으로 확인해보면 message4인 커밋이 사라진 것을 볼 수 있습니다.

 

git reset 명령의 옵션

명령 설명
--soft HEAD^ 최근 커밋을 하기 전 상태로 작업 트리를 되돌립니다.
--mixed HEAD^ 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌립니다. 옵션 없이 git reset 명령을 사용할 경우 기본으로 작동합니다.
--hard HEAD^ 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌립니다. 이 옵션으로 되돌린 내용은 복구할 수 없습니다.

 

4. 특정 커밋으로 되돌리기

  git reset 커밋 해시

 

01. 버전을 4가지를 만듭니다. 각각 V1, V2, V3, V4라고 커밋 메시지를 저장하고 이렇게 부르겠습니다.

 

02. reset에서 커밋 해시를 사용해 되돌릴 때 주의할 점이 있습니다. 예를 들어 reset A를 입력하면 이 명령은 최근 커밋을 A로 리셋한다는 의미입니다. 즉 A 커밋 이후에 만들었던 커밋을 삭제하고, A 커밋으로 이동합니다.

 

03. V2 버전으로 돌아가려면 git log에서 V2 버전의 커밋 해시를 복사합니다.

 

04. git reset --hard 복사한 커밋 해시를 입력합니다.

 

05. 다시 git log 입력해서 확인해보면 V3, V4 커밋은 사라지고 V2 커밋이 가장 최신 커밋이 된 것을 알 수 있습니다.

 

5. 커밋 삭제하지 않고 되돌리기

  git revert

 

01. 파일을 한 번 수정한 후 V5라는 메시지와 함께 커밋합니다.

 

02. git log를 입력해 버전을 확인해보면 V1, V2, V5 버전이 만들어져 있을겁니다.

 

03. 가장 최근에 커밋한 V5 버전을 취소하고 직전 커밋인 V2로 되돌아가려고 합니다. revert 명령의 경우에는 revert 명령 뒤에 취소하려고 하는 버전, 즉 V5의 커밋 해시를 지정합니다.

 

04. git log에서 V5의 커밋해시를 복사하고, git revert 복사한 V5 커밋 해시를 입력합니다.

 

05. revert 명령을 실행할 때는 기본 편집기가 자동으로 나타나면서 커밋 메시지를 입력할 수 있습니다. 커밋 메시지 맨 위에는 어떤 버전을 revert 했는지 나타나있습니다.

 

06. git log을 입력해보면 V5를 revert한 새로운 커밋이 생긴 것을 확인할 수 있습니다.

 

 

 

[GIT] - 03. GIT과 Branch

'GIT' 카테고리의 다른 글

05. GitHub로 협업하기  (0) 2020.02.15
04. GitHub로 백업하기  (1) 2020.02.05
03. GIT과 Branch  (0) 2020.01.28
01. GIT 시작하기  (0) 2020.01.15