이전에 Commit에 대한 글에서 이야기했듯, 작업 트리(Working tree)의 변경 이력을 저장소로 등록하려면 인덱스를 거쳐 commit해 줘야 합니다. 여기서의 저장소는 로컬 저장소로, 변경 이력을 원격 저장소에 적용하기 위해선 push라는 과정이 하나 더 필요합니다.

git status

만들어 두었던 저장소에 파일 하나를 추가하고, 콘솔에서 해당 디렉토리로 이동한 후 git status 명령어를 입력합니다.

$ touch sample.txt
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    sample.txt

nothing added to commit but untracked files present (use "git add" to track)
$

git status 명령어는 현재 작업 트리의 상태를 보여줍니다. 여기서는 만들어진 sample.txt를 Untracked files로 분류하고 있습니다. 이전에 File status lifecycle에서 이야기했던 것처럼, 새로 만들어진 파일을 Git이 관리하게(Tracked로 변경) 하려면 파일을 index로 옮겨 한 번 커밋해 주어야 합니다.

git add [files ...]

$ git add sample.txt

git add 명령어를 입력하는 경우, 파일들은 수정 여부에 따라 Staged 상태로 변경됩니다.(Unmodified -> Staged는 불가능하기 때문) 다시 git status를 입력하면, 파일이 인덱스에 추가(staging)되었음을 확인할 수 있습니다.

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   sample.txt

참고로 현재 디렉토리 위치를 포함하여 하위의 모든 변경사항을 인덱스로 옮기려면 git add 뒤의 path를 와일드카드로 입력하면 됩니다.

$ git add .
$ git add directory/.
$ git add *
$ git add directory/*

git commit -m [message]

수정 사항을 인덱스로 옮겼으니 이제 정말로 commit하는 일만 남았습니다.

$ git commit -m "First commit!"

git commit에 들어갈 수 있는 옵션은 아래처럼 정말 많습니다.

git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
       [--dry-run] [(-c | -C | --fixup | --squash) <commit>]
       [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
       [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
       [--date=<date>] [--cleanup=<mode>] [--[no-]status]
       [-i | -o] [-S[<keyid>]] [--] [<file>…​]

필수로 들어가야 하는 건 위의 -m 옵션으로, 해당 커밋에 대한 메시지를 의미합니다. 메시지 없이는 커밋이 되지 않습니다. 이전 글에서 이야기했듯 하나의 커밋에는 40자리 hex로 이루어진 고유 이름이 붙습니다. 이렇게 새롭게 생성된 파일을 커밋하고 나면, Untracked 파일들이 Tracked가 되고, Unmodified 상태로 git의 관리를 받기 시작함과 동시에, Index에 존재하던 변경 이력들이 커밋 정보들과 함께 HEAD로 이동합니다.

Index 생략하기

커밋은 Staging area(Index)에 올라와 있는 변경 사항들을 대상으로 진행됩니다. Staging area는 커밋할 파일을 정리한다는 점에서 매우 유용하지만 복잡하기만 하고 필요하지 않은 때도 있습니다. git commit 명령에 -a 옵션을 추가하면, Tracked&Modified 상태의 파일을 자동으로 Staging Area에 넣어 커밋합니다. 그래서 git add 명령을 실행하는 수고를 덜 수 있습니다.

$ git commit -a "Commit!"

'Git 레거시 글' 카테고리의 다른 글

[Git] 원격 저장소에 Push하기  (3) 2018.05.21
[Git] 원격 저장소 만들기  (0) 2018.05.20
[Git] 로컬 저장소 만들기  (0) 2018.05.18
[Git] 설치와 초기 설정  (0) 2018.05.17
[Git] 작업 트리와 인덱스  (0) 2018.05.16

+ Recent posts