
먼저, 깃은 버전 관리 시스템의 일종입니다.
이렇게 말하면 버전관리가 무엇이냐? 하는 의문이 당연히 따라오겠죠.
예를 들어,
우리가 어떤 코드를 작성하고 있다고 가정해봅시다.
작성 중 일단 오늘은 여기까지 하자 싶어서 저장을 합니다.
그러고 다음날 봤더니 코드에 수정할 게 좀 보입니다.
그런데 괜히 잘못 건드려서 프로그램 전체를 망칠 수도 있는 거잖아요?
그래서 원본 파일을 복사하고 안전하게 복사본으로 편집을 합니다.
수정한 코드가 제대로 돌아가는 것 같으면 원본에 합칩니다.
이 예시에서 우리의 컴퓨터에는
원본과 복사본이라는 두 개의 파일, 즉 두 가지 버전이 존재하게 됩니다.
이게 일반적인 방식으로 버전을 관리하는 방법이죠.
여기서 버전 관리 시스템, 즉 깃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 |
댓글 영역