먼저, 깃은 버전 관리 시스템의 일종입니다.
이렇게 말하면 버전관리가 무엇이냐? 하는 의문이 당연히 따라오겠죠.
예를 들어,
우리가 어떤 코드를 작성하고 있다고 가정해봅시다.
작성 중 일단 오늘은 여기까지 하자 싶어서 저장을 합니다.
그러고 다음날 봤더니 코드에 수정할 게 좀 보입니다.
그런데 괜히 잘못 건드려서 프로그램 전체를 망칠 수도 있는 거잖아요?
그래서 원본 파일을 복사하고 안전하게 복사본으로 편집을 합니다.
수정한 코드가 제대로 돌아가는 것 같으면 원본에 합칩니다.
이 예시에서 우리의 컴퓨터에는
원본과 복사본이라는 두 개의 파일, 즉 두 가지 버전이 존재하게 됩니다.
이게 일반적인 방식으로 버전을 관리하는 방법이죠.
여기서 버전 관리 시스템, 즉 깃Git을 이용하면
위에서 말한 복사본 만들기, 원본으로 합치기 같은 번거로운 작업을 깃이 알아서 해줍니다.
깃에게 "앞으로 이 폴더에서 버전관리를 할 거야" 라고 알려주고 나면
깃은 그 폴더 내에서 파일을 작성하고 편집하는 모든 과정을 기록합니다.
그래서 수정한 파일을 과거의 특정 시점으로 되돌리는 것이 가능합니다.
심지어 버전마다 메세지를 남기는 것도 가능합니다. 이게 바로 커밋입니다.
$ cd ~
홈 디렉토리로 이동
$ mkdir
새 디렉토리 만들기
$ cat hello.txt
파일 내용 보기
$ ls -al
파일 수정날짜 등 자세한 정보들 보기
$ git init
깃에게 현재 폴더에서 작업할거라고 알려줍니다
$ nano title.txt
title.txt라는 새로운 파일을 만들고 작성합니다
여기서 이해해야할 개념이 있습니다.
Working tree : 내가 작성한 파일 무더기들이 있는 곳
Staging Area : git add를 통해 버전 관리에 들어간 파일들이 있는 곳
Repository : 커밋을 하면 변경사항이 저장되는 곳
Repository는 저장소입니다.
내 컴퓨터는 지역 저장소, 남의 컴퓨터나 깃 허브 같은 것을 원격 저장소라고 부릅니다.
앞으로의 작업을 통해 우리는 파일을 위의 단계들을 거쳐 내 컴퓨터에 저장하거나 원격 저장소에 백업하는 일들을 처리하게 됩니다.
결론부터 말하면 우리는 앞으로
파일 수정 → add → commit 의 과정을 반복하여 버전관리를 하게 됩니다.
$ git status
지금 상태를 알려주는 명령어입니다. 버전관리에 들어가지 않은 파일은 untracked라고 표시됩니다.
혹은 working tree clean 이라고 뜨기도 하는데 버전으로 만들 파일이 없다는 뜻입니다.
$ git add hello.txt
깃에게 hello.txt를 버전관리할 파일이라고 알려줍니다.
즉, hello.txt를 Staging Area에 추가합니다.
$ git add .
현재 디렉토리 아래의 모든 파일을 add하고 싶을 때는 위 커맨드를 씁니다
우리가 이런 일을 하는 이유는 깃은 모든 파일을 자동으로 관리하지 않기 때문입니다.
역으로 생각해보면 원치 않는 파일이 버전 관리에 들어가봤자 쓸 데 없기만 하겠죠?
$ git commit -m "Message"
커밋 메세지를 작성합니다.
$ git commit -am "Message"
add와 commit을 한 번에 하는 명령어입니다. Untracked 상태의 파일은 적용되지 않습니다.
$ git commit --amend
커밋 메시지를 수정합니다.
이게 제가 깃을 쓰고 싶었던 이유중 하나이기도 한데요
깃허브에서 매번 커밋 메세지를 잘못 남기기 일수여서 수정 기능이 절실했습니다..
$ git commit
기본 에디터를 불러옵니다. 여러줄에서 커밋 메세지를 좀 더 편하게 작성할 수 있습니다.
주의할 점은 첫 줄은 띄우고 작성해야합니다.
에디터에서 나갈 때는 esc를 누르거나 :wq 를 입력해서 저장후 나가면 됩니다.
$ git log
커밋 내역 등 기록을 보고 싶을 때 씁니다.
$ git log --stat
각 버전마다 어떤 파일이 관여하고 있는지 확인 할 수 있습니다.
여기서 주의점은 깃은 여러 개의 파일을 하나의 버전으로 관리한다는 것입니다.
만약에 test1.txt라는 파일을 만들고 커밋 후, test1.txt을 편집한 후 test2.txt를 작성해서 커밋하면
첫번째 버전에는 text1.txt가 두번째 버전에는 편집한 후의 test1.txt과 새로 생성된 test2.txt가 하나의 버전으로써 저장됩니다.
$ git diff
새 버전에서 변경된 걸 확인할 수 있습니다.
$ git log -p
버전별로 변경된 사항을 체크 가능합니다.
$ git checkout commitID
지정한 커밋의 시점(과거)로 돌아갑니다. 현재 커밋 기록을 삭제하지는 않습니다.
참고로 커밋 아이디는 돌아가고 시점의 커밋 아이디를 붙여넣으시면 됩니다.
$ git checkout master
다시 head→master로 돌아옵니다. 위에서 잠깐 과거로 갔다가 현재로 돌아온다고 생각하시면 됩니다.
$ git reset --hard commitID
지정한 커밋의 버전으로 돌아갑니다. 이 경우 그 시점 이후의 커밋은 삭제가 됩니다.
$ git revert commitID
기억해야할 것은 버전3으로 가고 싶으면 버전 4를 revert해라는 것입니다.
이것은 기존의 커밋을 내버려두고 버전 4에서의 변화를 취소하는 작업인데,
버전 1로 가고 싶으면 버전4,버전3,버전2 이렇게 역순으로 revert해야 충돌이 안 생깁니다.
$ git config --global core.editor "nano"
깃의 기본 에디터를 변경합니다 (nano, vim 등)
$ git command --help
커맨드의 메뉴얼을 불러옵니다.
command 자리에는 알고 싶은 커맨드의 종류를 입력합니다 (reset,revert 등)
+
작업중인 폴더 내에 .gitignore 파일을 만들어서 무시하고 싶은 파일의 이름을 작성해두면 그 파일은 버전관리에서 제외됩니다.
-
이 포스팅의 내용은 생활코딩 Git CLI 버전관리를 수강하며 작성한 노트를 바탕으로 구성되었습니다.
잘못된 부분이 있다면 덧글로 언제든지 알려주시면 감사하겠습니다.
VSCode 에러 type parameter declarations can only be used in typescript files (0) | 2020.12.07 |
---|---|
배쉬란 무엇인가? 기본 명령어 정리 (0) | 2020.11.16 |
리눅스 Linux 명령어 cd 에 대해 알아두면 좋은 것들 (0) | 2020.06.02 |
초보자를 위한 리눅스 Linux 명령어 (0) | 2020.06.01 |
시그윈 Cygwin 패키지 컴파일러 gcc 설치하는 법 (0) | 2020.06.01 |
댓글 영역