작업 디렉토리(working Directory) 또는 작업 트리(working tree)의 파일은 크게 Tracked(관리대상)와 Untracked(관리대상 아님)으로 나뉜다.
Tracked 파일은 'Git이 알고 있는 파일', '저장소에서 관리하는 파일'이라고 할 수 있으며 다음 세 가지 상태 중 하나를 가진다. 나머지는 모두 Untracked 파일이다.
- Unmodified : 수정 안 된 파일
- Modified : 수정 된 파일
- Staged : commit으로 저장소에 기록할 파일. 스테이지(stage)에 올라간 파일.
- 스테이지 Stage : 버전으로 만들 파일이 대기하는 곳.
.git/index
파일에 저장됨- 저장소 Repository : 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳.
.git/HEAD
파일에 저장됨.
현재 깃 저장소의 깃 상태 확인을 위해 git status
명령을 입력한다. 입력 후 나타나는 메시지의 의미를 간단히 정리해본다.
$ git status
On branch master // 현재 master 브랜치에 있다.
No commits yet // 아직 commit한 파일이 없다.
nothing to commit ... // commit할 파일, stage에 올라온 파일이 없다.
새 파일 README를 만든 후, git status
명령을 입력해본다. 메시지의 내용이 다른 것을 확인할 수 있다. Untracked files에 README가 속해 있다. 이 외 자세한 내용은 아래에서 설명한다.
$ echo 'My Project' > README
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
새로운 파일을 생성한 후, git status
명령을 입력하여 받은 메시지 일부를 다시 확인해본다.
Untracked files:
(use "git add <file>..." to include in what will be committed)
// commit될 것들에 포함시키기 위해서는 "git add <file>..." 을 사용하라
README
nothing added to commit but untracked files present (use "git add" to track)
// commit에 추가된 것은 없으나 untracked 파일이 존재한다.
// (track에 올리기 위해서 "git add"를 사용하라.)
작업 트리에서 만들거나 수정된 파일의 현재 상태를 스테이지에 올리는 것을 스테이징 staging이라고 한다. 스테이징 할 때 사용하는 명령이 git add <file>
이다. 앞서 작성한 README를 스테이징하고 상태를 확인해본다.
$ git add README
$ git status
On branch master // master 브랜치다
No commits yet // 아직 commit 된 건 없고
Changes to be committed: // commit 될 변경 사항은 다음과 같다.
(use "git rm --cached <file>..." to unstage)
new file: README // 새로운 파일 README!
💡 스테이징 후, 수정된 파일은
git add
명령으로 다시 스테이지에 올려주어야한다. 스테이지에는git add
명령 당시의 파일 버전이 올라가있다.
$ vim modify-test // vim으로 새로운 파일 modify-test 생성
$ git add modify-test // modify-test 스테이징
$ git status // git 상태 확인
On branch master
No commits yet
Changes to be committed: // commit 될 변경 내용은 다음과 같다.
(use "git rm --cached <file>..." to unstage)
new file: README // 새로운 파일 README
new file: modify-test // 새로운 파일 modify-test
$ vim modify-test // vim에서 modify-test 수정
$ git status // git 상태 확인
On branch master
No commits yet
Changes to be committed: // commit 될 변경 내용은 다음과 같다.
(use "git rm --cached <file>..." to unstage)
new file: README // 새로운 파일 README
new file: modify-test // 새로운 파일 modify-test
Changes not staged for commit: // 스테이징 되지 않은 변경 사항들은 다음과 같다.
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: modify-test // 수정된 modify-test
파일 수정 후, 깃 상태를 확인해보니 스테이지에 올라간 파일 목록은 수정 전과 같지만, not staged 파일 목록에 수정된 파일이 생긴 것을 확인할 수 있다.
스테이지에 올라온 파일은 버전을 만들 수 있고, 버전을 만드는 것을 '커밋(commit)한다'고 말한다. 버전을 만드는 명령은 git commit
으로, 보통 -m
옵션을 함께 사용하여 커밋 메시지와 함께 저장한다.
$ git commit -m "commit message"
[master (root-commit) 3f08ac6] commit message
2 files changed, 2 insertions(+)
create mode 100644 README
create mode 100644 modify-test
$ git status
On branch master
nothing to commit, working tree clean
--amend
옵션은 가장 최근의 커밋 메시지를 수정할 수 있도록 해준다. vim이 실행되어 원래 커밋 메시지가 위쪽에 나타나고, 이를 수정하여 저장한다.git commit
명령에 -a
옵션을 추가하면 Git에서 Tracked 상태의 파일, 한번 commit한 파일들을 자동으로 staging 하고 commit 한다. $ git commit -am "commit message"
💡
git status
메시지로 알 수 있는 파일 상태
- Changes not staged for commit ... : 수정만 된 modified 상태
- Changes to be committed ... : commit 직전, staged 상태
- nothing to commit, working tree clean ... : unmodified 상태