취미가 좋다

GIT 2 : CLI 버전 관리 본문

개발 기타/git

GIT 2 : CLI 버전 관리

benlee73 2021. 1. 3. 15:34

GIT은 여러 방법으로 사용될 수 있고, CLI는 명령어를 통해 git을 사용하는 가장 대표적인 방법이다.

 

그리고 GUI로 제어할 수 없는 서버 환경에서도 git을 사용할 수 있는 유일한 방법이다.

 

 

 

이 글은 git의 버전 관리를 위한 사용법들과 명령어들을 소개하고, 순서는 다음과 같다.

 

  • git 시작하기
  • 버전 간의 차이점 비교
  • checkout
  • 보충
  • 삭제 (reset)
  • 되돌리기 (revert)

 

git 설치

git-scm.com/ 에서 git을 설치할 수 있다.

 

Git

 

git-scm.com

 


 

용어 정리

  • Working tree : 파일이 버전으로 만들어지기 전 단계. 수정이 이루어지는 곳.
  • Staging Area : 수정하여 새로운 버전들을 만들려고 하는 파일들을 올려놓는 곳. 버전을 만들 때 staging area에 있는 수정 정보들만 적용해서 새로운 버전을 만든다.
  • Repository (저장소) : 버전이 저장되어 있는 곳. 디렉토리 .git라고 볼 수 있다.

 

git 시작하기

$ git init

현재 디렉토리에서 버전관리를 시작하기 위한 명령어이다.

 

명령어를 수행하면 디렉토리에 .git 폴더가 생기고, 앞으로의 모든 버전과 관련 정보가 그곳에 저장된다.

 

 

$ git status

git의 현재 상태를 보기 위한 명령어이다.

 

untracked file : 수정파일을 stage에 올리지 않은 파일. 한 번도 버전관리의 대상이 되지 않았다는 의미이다.

 

 

$ git add hello1.txt

hello1.txt 를 stage에 올리는 명령어이다.

 

수정된 파일이 stage에 올라가 커밋된 상태가 되어, 버전이 될 준비를 마쳤다. 

 

stage에 add한 후의 status

 

$ git commit -m "message 1"

stage에 올라간 수정된 파일들을 커밋한다. 즉, 하나의 버전으로 만들어준다.

 

-m 옵션 : 커밋과 동시에 command line에서 직접 commit message를 입력한다.

 

 

$ git log

지금까지의 버전들을 볼 수 있다.

 

 


 

버전 간의 차이점 비교

modified 와 untracked 의 차이

hello1.txt 파일과 hello2.txt 파일 모두 working tree에서 수정되고 아직 stage에 올라가지 않는 것은 동일하다.

 

하지만 modified 상태인 hello1.txt은 이전에 commit 되어 버전관리의 대상이 된 적이 있는 반면,

untracked file인 hello2.txt는 아직 버전관리의 대상이 된 적이 없다는 것을 의미한다. 

 

$ git log --stat

각 버전에 어떤 파일이 수정되어 있는지 알 수 있다.

 

 

$ git diff

마지막 버전과 working tree 와의 차이점을 알 수 있다.

 

버전을 만들기 전에 마지막을 검토하는 작업을 할 수 있다.

 

 

$ git reset --hard

지금까지 작업한 내용이 사라지고 마지막 버전으로 돌아간다.

 

 

$ git log -p

각 버전별로 이전 버전과의 차이점을 알려준다.

 

message 2 버전에서 hello1.txt는 2, 3, 4가 추가되었다.

message 2 버전에서 hello2.txt는 이전 버전은 없었고 1, 2가 추가되었다.

 

 


 

checkout

$ git checkout {commit id}
$ git checkout master

과거 버전으로 되돌리기 위한 명령어이다.

 

git log를 통해 각 commit의 id를 알 수 있고, HEAD라는 표시를 볼 수 있는데 현재 디렉토리의 상태 혹은 위치라고 볼 수 있다.

 

git checkout 다음에 log에서 확인한 commit id를 입력하면 해당 버전을 불러올 수 있다.

 

git checkout master 로 가장 마지막에 commit한 버전을 불러온다.

 

처음 상태
checkout 이후의 화면

checkout 이후로 HEAD의 위치가 바뀐 것을 확인할 수 있다.

 

master를 불러와 가장 마지막 commit으로 다시 돌아온다.

 


 

보충

$ git add .

디렉토리의 모든 수정 사항을 stage에 올린다.

 

$ git commit -am "message"

add와 commit을 한 번에 수행한다.

 

최초 한 번은 add로 tracked 상태가 되어야, 따로 지정하지 않고 add가 될 수 있다.

 

$ git config --global core.editor "{name of editor}"

git commit 했을 때 사용하는 기본 editor를 변경할 수 있다.

 

sublime text를 사용하려면 실행 파일(.exe)의 디렉토리를 입력하면 된다.

 

 

.gitignore

버전관리의 대상에서 제외하고 싶은 파일을 넣으면 된다.

 

임시 파일이나 중요 개인 정보가 들어있는 파일을 넣어둘 때 좋다.

 

 

tag

알아보기 어렵고 외울 수 없는 commit id를 대체하여 사용하여, 특정 버전에 이름을 붙여서 쉽게 찾아갈 수 있다.


 

삭제

$ git reset --hard {commit id}

 

--hard 는 버전 뿐 아니라 수정하고 있던 것 까지 모두 지운다.

 

message 3 를 지우고 message 2 가 되려면 $ git reset --hard aef5283effb3b9433b65e4897627b26796200168

 

삭제의 경계를 명확히 구분해야 한다.

message 3 를 지우기 위해서 message 3의 commit id를 입력하는 것이 아니라 reset되려는 commit id를 입력해야 한다.

 

그 결과 message 3 버전이 없어지고 HEAD와 master가 바뀌었다.

 


 

되돌리기

$ git revert {commit_id}

 

reset은 입력한 commit id에 해당하는 버전으로 이동하지만, revert는 입력한 버전의 이전으로 돌아간다.

 

즉, 입력한 버전의 변경사항들이 적용되기 전의 상태로 가고, 그 상태의 버전이 하나 새로 생성된다.

 

 

처음 상태

 

git revert를 하고 난 후 새로운 commit이 생성되고 message 4 이전 버전인 message 3의 상태로 돌아갔다.

 

 

주의할 점

revert는 입력한 버전의 변경 사항들만 처리하기 때문에, 몇 개 이전의 버전으로 돌아가기 위해서는 하나 하나씩 revert를 해야한다.

 

만약 message 1으로 돌아가고 싶다면 message 4, 3, 2 순서대로 처리해야한다.

 

바로 revert message 2 버전을 하게 되면 그 때의 변경사항들만 처리하지 4, 3의 변경사항들은 고려하지 않아 충돌이 일어나기 때문에 조심해야 한다.

 

 


본 글은 생활코딩 YOUTUBE를 보고 작성되었습니다.

 

생활코딩

일반인에게 프로그래밍을 알려주는 온라인/오프라인 활동 입니다. 채널 공개키 : MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbU/jgeYLWbmUB5pk/wlqMs+2qsOOPgN2ydxOsrWe8JJUXzj5ovsUmjfBSwLjajT6SyO00ulne3zja2PzEZC2wnJCgvZ6lr/ZLvA9yUqmrKRNa

www.youtube.com

 

'개발 기타 > git' 카테고리의 다른 글

git rebase 간단 설명  (0) 2023.01.24
git merge 간단 설명  (0) 2023.01.24
깃 (git) 쉽고 간단한 설명  (1) 2023.01.24
GIT 3 : CLI 백업  (0) 2021.01.05
GIT 1 : 개요  (0) 2021.01.02
Comments