취미가 좋다
GIT 2 : CLI 버전 관리 본문
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에 올라가 커밋된 상태가 되어, 버전이 될 준비를 마쳤다.
$ 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 이후로 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 |