실습을 통해 Git 이해하기
Git을 구성하는 3개의 영역과 파일에 대한 상태를 실습을 통해 확인해 보겠습니다.
본 실습을 통해 아주 기본적인 Git의 명령어들도 여러 가지 알 수 있습니다.
앞서 우리가 만든 저장소 firstrepo에서 터미널(Git Bash)을 실행합니다.
해당 폴더로 가서 마우스 오른쪽 버튼을 클릭하고 “Git Bash Here” 메뉴를 통해 빠르게 실행할 수 있습니다.
아니면, Git Bash 를 실행하고 firstrepo 폴더로 이동하면 되겠습니다.
실행한 터미널은 다음과 같습니다.
터미널 실행 후 경로가 firstrepo 인지 다시 한번 확인하고 뒤에 (master)가 표시되어 있는지 확인합니다.
(master) 표시가 없다면, git init 명령어로 깃을 초기화해 보기 바랍니다.
[상황 1] 최초 파일A 생성
$ code filea.html 이라고 입력해서 filea.html 파일을 생성하겠습니다.
다음과 같이 VSC가 실행되고 filea.html 파일을 편집할 준비가 됩니다.
저는 <h1>파일A를 만듭니다. </h1>를 입력하고 저장해 보겠습니다.
파일을 저장하면 저장된 파일 경로가 나타납니다.
다시 터미널(Git Bash)로 돌아옵니다.
터미널에서 $ ls 명령어로 생성된 filea.html 파일이 있는지 확인합니다.
그런 다음, status 명령어를 통해 git의 상태를 확인합니다.
$ git status라고 입력하고 엔터를 눌러보면, 그 아래로 Git의 상태를 표시해 주고 있습니다.
메시지를 하나하나 살펴보겠습니다.
- On branch master : 현재 브랜치가 master 임을 표시하고 있습니다.
- No commits yet : 저장소에 커밋된 이력이 없을 때 표시됨. 하나라도 커밋된 이력이 있다면 해당 메시지는 출력되지 않습니다.
- Untracked files : Untracked 파일이 있고 그 아래에 해당하는 파일을 표시해 주고 있습니다.
- (use “git add <file>...” to include ~~~ : 커밋하려면 git add 하라고 합니다.
- nothing added to ~~~ : track 하려면 “git add” 하라고 (use “git add” to track)이라고 도움말도 주고 있습니다.
이와 같이 Git의 상태를 확인하는 명령어는 status입니다.
사용법은 다음과 같으며, -help 옵션을 사용하면 사용법을 상세히 확인할 수 있습니다.
# Git 상태 확인
$ git status <옵션>
여기까지가 앞서 그림으로 살펴본 [상황 1] 파일A 생성에 해당합니다.
여기까지는 아직까지 워킹 디렉토리에만 filea.html이 존재합니다.
소스트리에서도 확인할 수 있습니다.
앞서 소스트리 설치하고 firstrepo 저장소를 추가해 뒀다면 다음 화면을 확인할 수 있을 것입니다.
소스트리에서도 “스테이지에 올라가지 않은 파일”이라는 영역에 filea.html을 보여주고 있습니다.
“스테이지에 올라가지 않은 파일” 영역이 워킹 디렉터리라고 이해해도 되겠습니다.
[상황 2] add 명령어로 파일A를 스테이지에 등록
다음으로 $ git add 명령어로 tracked 상태로 바꿔보고 스테이지 영역에 추가해 보겠습니다.
$ git add filea.html 이라고 입력해서 추가하고, $ git status로 상태를 확인해 봅니다.
$ git add filea.html이라고 입력하고 엔터를 눌렀을 때는 아무런 메시지도 없다는 점 참고하기 바랍니다.
$ git status로 상태를 다시 확인해 보면,
이번엔 초록색으로 new file: filea.html이라고 표시되는 것을 확인할 수 있습니다.
그리고 (use “git rm --cached <file>...” to unstage)라는 메시지를 볼 수 있습니다.
“git rm --cached <file>...”은 unstage 하는 명령어 사용법으로 스테이지에 등록된 파일을 삭제하는 방법입니다.
앞서는 Untracked 파일이라고 직관적으로 표시해 줬었는데,
이번엔 Changes to be committed: 라고 커밋할 변경 사항이라고 표시하고 있습니다.
이는 stage이고 unmodified 일 경우, 그리고 커밋되지 않은 파일이라고 이해하면 되겠습니다.
여기서 스테이지에 등록하고 등록한 파일을 삭제하는 명령어 및 사용법은 다음과 같습니다.
# 스테이지(Stage)에 등록하기
$ git add <옵션>
# 스테이지에 등록한 파일 삭제하기(1)
$ git rm --cached <파일>
# 스테이지에 등록한 파일 삭제하기(2)
$ git restore --staged <파일>
여기까지 [상황2] 파일A를 스테이지에 등록한 결과이며, 다음 그림과 같습니다.
마찬가지로, 소스트리에서도 다시 한번 확인해 보면 다음과 같이 변화가 생겼습니다.
앞서 “스테이지에 올라가지 않은 파일” 영역에 있던 filea.html이
이제는 “스테이지에 올라간 파일” 영역으로 옮겨 갔습니다.
터미널에서 $ git add를 통해 스테이지에 추가했지만,
아래 그림과 같이 소스트리를 이용하면 간편하게 [+] 버튼을 클릭해 추가할 수 있습니다.
“스테이지에 올라가지 않은 파일” 박스에 있는 filea.html 옆에 [+] 버튼을 클릭하면 됩니다.
이렇듯 GUI툴은 CLI방식 보다는 확실히 이용을 편리하게 해 줍니다.
[상황 3] 파일A를 수정합니다.
세 번째 과정으로 filea.html을 수정해 보겠습니다.
$ code filea.html을 실행해 filea.html 파일을 다시 열어서,
<h2>파일A를 수정합니다.</h2>를 추가하겠습니다.
다시 터미널로 돌아와 $ git status로 상태를 확인합니다.
스테이지 영역에 새로운 파일 filea.html 이 생겼다는 내용과
그 아래에 not staged (스테이지 안된) 변경사항으로
filea.html 이 modified 되었다고 표시해주고 있습니다.
이것을 소스트리에서 확인해 보면 다음과 같습니다.
“스테이지에 올라간 파일” 영역에도 filea.html 이 존재하고
“스테이지에 올라가지 않은 파일” 영역에도 filea.html이 존재하는 상태를 보여주고 있습니다.
이 상태가 다음의 [상황 3] 파일A 수정 단계를 나타내고 있습니다.
[상황 4] 수정한 파일A를 다시 스테이지에 등록
여기서 다시 add 명령어로 stage 시키고, Git 상태를 확인해 보겠습니다.
앞서 두번째 “git add” 후의 상황과 같아지게 됩니다.
아래 그림으로 나타낸 것도 [상황 2]와 [상황 4]가 같음을 알 수 있었습니다.
[상황 5] 파일A를 저장소에 기록
저장소에 파일의 이력을 기록하기 위해서는 커밋(commit)을 해야 합니다.
결론적으로 저장소의 파일들은 Committed 상태입니다.
커밋을 하는 방법은 Git 명령어로 commit입니다.
사용법은 다음과 같은 형식이 됩니다.
# 커밋하기(저장소에 파일의 이력을 기록)
$ git commit <옵션>
커밋을 이해하기 위해서는 HEAD 개념을 알아야 합니다.
커밋에 대해서는 뒤에서 다시 학습을 하겠습니다.
지금은 Git의 전체적인 개념을 이해하는 과정으로
저장소(Repository)에 기록하기 위해서는 커밋(commit)을 해야 하고
그때 사용하는 명령어가 $ git commit이다.라는 정도만 알고 넘어가겠습니다.
이렇게 저장소에 기록된 상태가 커밋된(committed) 상태가 됩니다.
커밋(commit)을 하기 위해서는 파일은 stage 상태여야 하고 unmodified 상태여야 합니다.
지금이 커밋할 수 있는 상태입니다.
그럼 커밋해보고 상태를 확인해 보겠습니다.
커밋을 위해 git commit -m “first commit” 이라고 입력하고 엔터를 누릅니다.
커밋을 하기 위해서는 커밋 메시지를 반드시 입력해야 합니다.
커밋 메시지를 추가하기 위해 -m 옵션을 이용해 작성한 것입니다.
“git commit” 만 실행하면 메시지를 입력하기 위해 vim 에디터가 실행됩니다.
저는 빠르게 커밋을 해보기 위해 커밋 명령어 라인에 바로 커밋 메시지를 바로 입력했습니다.
[master (root-commit) 89316540] first commit
1 file changed, 2 insertions (+)
create mode 100644 filea.html
위와 같이 커밋 실행 결과를 확인할 수 있습니다.
커밋 후에 상태를 확인해 보면,
커밋할 내용은 없고, 워킹 디렉터리(working tree)는 clean 하다고 보여줍니다.
커밋을 하고 난 이후에는 워킹 디렉터리와 스테이지가 정리된다고 표현합니다.
지금까지의 결과를 그림으로 나타내면 다음과 같으며,
이는 처음 상황을 논리적으로 확인했을 때와 같음을 알 수 있습니다.
커밋이 되면 파일A는 committed 상태가 됩니다.
스테이지 영역은 비워지게 되고,
워킹 디렉토리의 파일A와 저장소의 파일A는 같은 내용으로
변화가 없는 상태가 되면서 워킹 디렉토리가 클린(clean) 한 상태를 나타냅니다.
소스트리에서도 파일 상태를 확인해 보면 다음과 같이 아무런 내용이 없다는 것을 확인할 수 있습니다.
실습을 통해 사용해 본 Git 명령어를 정리하면 다음과 같습니다.
# Git 상태 확인
$ git status <옵션>
# 스테이지에 등록
$ git add <옵션>
# 스테이지에 등록된 파일 삭제 (1)
$ git rm --cached <파일>
# 스테이지에 등록된 파일 삭제 (2)
$ git restore --staged <파일>
# 저장소에 기록(커밋)
$ git commit <옵션>
이상 실습을 통해 Git의 기본 명령어와 Git이 인식하는 파일의 상태에 대해 확인해 보았습니다.
-끝-
'코딩해보니 > Git' 카테고리의 다른 글
[Git_16] 커밋(Commit)의 이해 - 커밋 이력 확인하기 (0) | 2022.12.08 |
---|---|
[Git_15] 커밋(Commit)의 이해 - 커밋 하기 (0) | 2022.12.06 |
[Git_13] Git 개념 잡기 - Git에서 파일 상태 이해 하기 (0) | 2022.11.18 |
[Git_12] Git 개념 잡기 - 워킹 디렉토리, 스테이지, 저장소 (0) | 2022.11.17 |
[Git_11] Git 개념 잡기 - Git 영역 살펴보기 (0) | 2022.11.14 |
댓글