git status, add, reset, commit
git에서의 3가지 영역
- Working Directory
- Staging Area
- Git Directory(Repository)
Working Directory
프로젝트를 진행하는 실제작업 공간, 파일을 추가하거나 수정하는 영역
Staging Area
Working Directory에서 작업한 내역을 Git Repository로 commit하기 위해 commit 대상 목록을 담아두는 영역
Git Directory(Repository)
.git 이라는 이름을 가진 디렉터리, 여러가지 버전의 commit data, git 프로젝트에 대한 모든 정보를 담고 있는 영역, 데이터베이스
-> Working Directory 에서의 변경 내용을 commit 하기 위해서는 변경내용을 우선 Staging Area에 등록하고 그 후에 Git Directory에 등록하는 절차를 거쳐야 한다.
Git에서 파일의 여러가지 상태 (Git의 추적관리 여부)
- Tracked
- Untracked
Tracked
Git이 해당 파일을 추적 및 관리하는 상태
Untracked
아직 Git이 해당 파일을 추적 및 관리하지 않는 상태
기억할 것
1. Working Dirctory에 존재한다고 해서 모두 Git이 관리하는 파일인 것은 아님
2. Untracked 파일은 삭제 또는 수정되어도 Git에서 전혀 신경쓰지 않음. 실수로 인한 삭제로부터의 복구도 불가능함.
3. Tracked = 최소 한 번은 git add 명령을 통해 Staging Area에 포함 또는 commit을 통해 git directory에 저장된 상태
4. Untracked = Working Directory에 있지만 git add나 commit을 진행하지 않은 상태
Git에서 파일의 여러가지 상태 (파일의 변경여부)
- modified
- Unmodified
modified
파일 내용에 대한 변경, 수정이 일어난 상태
Unmodified
파일 내용에 대한 변경, 수정이 일어나지 않은 상태
기억할 것
1. 변경발생의 기준 - 파일이 Staged 또는 Commit된 시점 이후로 변경되었는 가?
2. Staged - git add 명령을 통해 변경내용을 Staging Area에 추가한 상태
3. Commit - git commit 명령을 통해 변경 내용을 git directory에 추가한 상태
4. Untracked 파일은 다음 두 가지 상태를 갖지 않음. (Modified, Unmodified)
-> 즉, Modified, Unmodified 상태인 파일은 곧 Track 상태인 파일을 말하는 것이다.
5. Staged 되지 않았다.
-> Untracked 나 Unmodified 상태인 파일을 Staging Area에 등록하지 않은 상태
git status
현재 git 프로젝트의 상태를 확인
git status -s / git status --short
해당정보 (Git 프로젝트)를 간략화
commit 후 아무런 변경을 하지 않은 상태에서 git status 명령을 입력하면 아래와 같이 commit할 내역이 없음을 보여준다.
하지만, 여기서 working directory 내에 있는 main.c, order.c, order.h 파일의 내용을 수정후 git status를 입력하면 아래와 같이 나타난다. 수정한 3개의 소스파일은 모두 Tracked 상태로써, Git에 의해 관리되고 있는 파일들이다. 아래에서 볼 수 있듯이 내용을 수정한 3개의 파일이 modified 상태임을 보여주고 있다.
이번에는 working directory에 아래와 같은 내용의 hello.c 파일을 추가해보도록 하겠다.
hello.c 파일의 추가 후 다시 git status 명령을 입력해보면 아래와 같이 새롭게 추가된 hello.c 파일이 untracked 상태임을 보여준다. 추가한 hello.c 파일은 add하거나 commit 하지 않은 상태이기 때문에 Untracked 상태로 나타난게 된다.
git add
Working Directory에서의 변경 내용을 Staging Area에 등록
아래와 같이 git add 명령을 사용해서 변경된 내용들을 Staging Area에 추가한 후 git status를 입력하면 아래와 같이 나타난다. add된 파일들은 콘솔 상에서 색상이 녹색으로 변경되어 나타나는 것을 확인할 수 있다. 아래의 예시에서 볼 수 있듯이 "*(확장자)" 표현을 사용하면 해당 확장자를 가진 모든 파일을 한번에 지정하여 수행할 수 있다.
아래와 같이 새롭게 추가된 파일 1개와 수정된 파일 3개이 Staging Area에 등록되어서 commit할 준비가 된 것을 확인할 수 있다. 여기서 새로 추가한 hello.c 파일의 경우에는 파일을 생성한 후 Git이 처음으로 인식한 것이기 때문에 modified 상태를 가지지 않고 Tracked 상태만을 가지지만 기존에 존재했던 나머지 3개의 파일은 modified와 Tracked 상태를 동시에 가지는 것을 확인할 수 있다.
그리고 위의 상태에서 부가적으로 git status 명령에 -s, --short 옵션을 사용해서 그 출력결과를 보면 아래와 같이 나타난다. 두 옵션을 사용한 출력결과는 동일하며 아무런 옵션을 사용하지 않고 git status 명령을 사용한 경우에 비해서 훨신 간략화된 내용이 출력되는 것을 확인할 수 있다.
위의 출력내용을 보면 각 파일의 이름 앞쪽에 한 자의 알파벳이 붙는 것을 확인할 수 있는데 해당 자리에 위치하게 되는 각 문자들의 의미는 아래와 같다. (실제로는 위의 예시에서 보이는 것보다 더 많은 종류가 존재한다.)
문자 | 내용 |
?? | Git directory에 새로운 파일이 추가되었으나 Untracked 상태인 경우 |
A | 새로운 파일이 추가된 후 git add 명령을 통해 Staged 상태가 된 파일 |
(공백)M | Working Directory에서 파일을 수정했지만 Staging Area에 add 하지 않은 상태 |
M | Working Directory에서 파일을 수정하여 Modified 상태인 파일을 Staging Area에 등록한 Staged 상태 |
git reset HEAD (파일명)
Staged 상태의 파일을 다시 Unstaged 상태로 변경
그런데 만약 위의 상황에서 hello.c 팡리은 다시 Unstaged 상태로 만들고 싶다면 어떻게 해야할 까? 이 경우 reset 명령을 사용한다. 여기서 만약 파일명을 입력하지 않는 경우 add 했던 모든 파일에 대한 작업이 취소되고 다시 Unstaged 상태로 되돌아가게 된다.
git commit
Staging Area에 존재하는 Staged 상태의 파일들을 Git Directory(=Repository)에 추가
git commit -m
작성한 commit message를 포함하여 Staging Area에 존재하는 Staged 상태의 파일들을 Git Directory(=Repository)에 추가
git commit -am
변경사항이 있는 모든 파일내용을 add와 동시에 입력한 commit 메시지와 함께 Git Directory(=Repository)에 추가
'Tools > Git, Github' 카테고리의 다른 글
git commit - 변경사항 commit 하기 (0) | 2021.01.11 |
---|---|
git diff - 변경 내용 살펴보기 (0) | 2021.01.10 |
git log - commit 기록 조회하기 (0) | 2021.01.09 |
Git 관련 명령어 - git init / git clone (0) | 2021.01.07 |
Git에 대하여, 관련 내용 정리 (0) | 2021.01.06 |
댓글
이 글 공유하기
다른 글
-
git diff - 변경 내용 살펴보기
git diff - 변경 내용 살펴보기
2021.01.10 -
git log - commit 기록 조회하기
git log - commit 기록 조회하기
2021.01.09 -
Git 관련 명령어 - git init / git clone
Git 관련 명령어 - git init / git clone
2021.01.07 -
Git에 대하여, 관련 내용 정리
Git에 대하여, 관련 내용 정리
2021.01.06