[Git/Github] Git 기본 명령어1 — add, commit (버전 생성하기)

dEpayse
dEpayse_publication
6 min readFeb 27, 2022

add, commit

git의 commit은 하나의 버전이라고 했다. 버전을 관리하는 내부 동작을 이해하기 위해 두 개의 버전을 만드는 과정을 예로 들어보자. 두 개의 버전을 만들기 전에 TestProject라는 폴더를 생성하여 git init으로 초기화된 상태에서 시작하는 상황을 가정하자. (git init이 생소하신 분은 아래 링크를 참고해주세요!)

TestProject 폴더에 ‘first file.txt’ 를 생성하고, 내용으로 “첫 번째 커밋” 이라고 작성한 후 저장하자.

Fig1–1. 프로젝트 파일에 텍스트 파일 생성하여 저장

이 상태에서 git은 ‘first file.txt’ 라는 파일에 대해 알 수 없다. ‘.git’ 폴더에 저장된 정보가 없기 때문이다. 이 상황의 영역과 상태를 도식하면 아래와 같다.

Fig1–2. 프로젝트 파일에만 파일을 저장했을 때 영역과 상태

git 에서 버전을 만들기 위해 Staging Area라는 개념이 있는데, ‘.git’ 폴더 내에서 ‘index’ 라는 파일로 존재하며 변경사항 중 다음 버전으로 만들 파일들의 정보를 저장한다. 따라서 버전으로 만들기 위해(커밋을 생성하기 위해) ‘first file.txt’ 라는 파일을 Staging Area 로 넣어줘야 하는데, 이 명령어가 바로 add이다. Fig 2–1 과 같이 git add 명령어 후에 파일명을 확장자명과 함께 입력해주면 된다. git diff 명령어는 어떤 파일이 Staging area에 있는지 보는 명령어이며, 중요한 것은 add 명령어이다.

Fig2–1. git에 버전으로 만들 새 파일 추가해주기

이 상황의 영역과 상태를 도식하면 아래와 같다. git을 초기화하면 기본적으로 master라는 이름의 브랜치(작업공간)을 생성해서 커밋이 여기서 이루어진다. Fig2–1에서 (master)라고 표기된 것은 이 이유 때문이다.

Fig2–2. git add 했을 때 영역과 상태

여기서 헷갈릴 수 있는 점이 있다. ‘first file.txt’ 파일은 ‘.git’ 폴더로 옮겨지는 것이 아니고, Working Directory에는 그대로 존재하며, ‘.git’ 폴더 내에는 Blob 파일로 내용이 복사되고 Tree 파일에 파일명과 확장자가 기록된다.

여기서 ‘second file.txt’ 파일을 추가하고 내용을 “첫 번째 커밋 두 번째 파일” 으로 입력한 후 Fig1–1 ~ Fig2–2 까지 첫 번째 파일과 같은 과정을 거치면 Fig 3–1 과 같은 상태가 될 것이다. 이제 Commit을 생성해보자.

Fig3–1. 두 개의 파일을 생성 후 add 했을 때 영역과 상태

아래와 같이 git commit -m 명령어와 커밋 메세지를 입력해주면 커밋이 생성되면서 어떤 파일이 추가되었는지 알려준다.

commit 이 잘 생성되었나 확인하려면, git log 명령어를 통해 commit 내역들을 확인할 수 있다. commit 생성이 완료된 시점에서 영역과 상태를 나타내면 Fig3–2 와 같이 커밋된 파일들이 Unmodified 상태가 된다.

Fig3–2. 커밋한 직후 영역과 상태

첫 번째 커밋이 완료된 시점에서 first file.txt 파일과 second.txt 파일은 Unmodifed 상태지만 git에서 추적할 수 있는 Tracked 상태이다. first file.txt 의 내용을 “두 번째 커밋 첫 번째 파일”로 수정하고, second file.txt의 내용도 “두 번째 커밋 두 번째 파일”로 수정해보자.

Fig4–1. 이미 git에 추가된 파일 중 수정된 파일들의 영역과 상태

first file.txt와 second.txt 파일은 git에서 추적이 가능하지만(이미 ‘.git’ 폴더에 추가되어 있기 때문), Staging area에 올라간 상태가 아니다. git status 명령어를 통해 파일들의 상태를 확인할 수 있다.

변화가 있는 파일은 Staging Area에 올려야 commit을 생성할 수 있다. 이 때 사용하는 명령어도 마찬가지로 add 이다. 두 개의 파일 모두 add 해준 후 git status 명령어를 사용하면 아래와 같이 staging area에 잘 올라간 것을 확인할 수 있다.

이 과정을 영역과 상태에 표현하면 아래와 같다.

Fig4–2. 수정된 파일들을 Staging Area에 올리기

변경된 파일을 모두 Staging Area에 올렸으니 이제 두 번째 커밋을 생성해주자!

커밋 완료 직후 파일의 영역과 상태는 Fig4–3과 같다.

Fig4–3. 커밋한 직후 영역과 상태

정리

Fig5. add, commit 과정 중 파일의 영역과 상태

이번 포스트에서는 git 의 add, commit 명령어와 영역과 상태를 함께 살펴보며 진행하였지만, Fig5가 이번 포스트에서 진행한 내용을 요약해준다. 세부적인 내용들은 아래에 정리하였다.

  • git add 명령어는 새로 추가된 파일을 바로 Staging Area(index)에 올려준다.
  • git add 명령어는 추적되고 있는 파일 중 변경 사항이 있는 파일을 Staging Area에 올려준다.
  • git commit 명령어는 하나의 버전을 만들어주는 명령어이며, 보통 -m이라는 옵션 명령어와 함께 사용하여 커밋 메세지를 기록한다.
  • git log 는 지금까지 이루어진 작업의 기록을 볼 수 있다.
  • git status는 변경 사항이 있는 파일들의 상태를 보여준다.
  • 처음 git init을 통해 초기화하면 master branch에서 작업이 이루어진다.

Reference

  1. [Git official — Book] — https://git-scm.com/book/en/v2

--

--

dEpayse
dEpayse_publication

나뿐만 아니라 다른 사람들도 이해할 수 있도록 작성하는, 친절한 블로그를 목표로.