Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리한다.

Committed

데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.

Modified

수정된 파일이 아직 staged 상태로 올라가지 않은 상태를 말한다.

Staged

현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.

파일의 구분


Git은 또한 모든 파일을 Tracted(관리대상)Untracted(관리대상 아님)로 나눌 수 있다. Untracted 파일은 워킹 디렉토리에 있는 파일 중 snapshot에도 Staging Area에도 포함되지 않는 파일이다.

기본 명령어


status(파일의 상태 확인하기)

git status는 현재 파일들의 상태들을 보여준다. untracted files는 초록색 tracted fils는 빨간색으로 나타내주며 확인을 자주하기 때문에 가장 많이 쓰이는 명령어 중 하나이다. README.md 파일을 생성한 직후 status 명령어를 실행해보자.

$ echo 'My Project' > README.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracted files:
	(use "git add <file>..." to include in what will be committed)
	**README.md**
nothing added to commit but untracted files present (use "git add" to track)

Untracted files에 README.md 파일이 추가되어 있는 걸 볼 수 있다.

add(파일을 새로 추적하기)

git adduntracted 파일을 tracted 파일로 바꿔주며 staged 상태가 된다. 앞에서 만든 README.md 파일을 add 해보자.

$ git add README.md

그리고 다시 status 명령어를 사용하면

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
	**new file:   README.md**

add -A모든 untracted filesadd하기 위해선 아래 -A 옵션을 사용한다.

$ git add -A

commit(변경사항 커밋하기)

git commitstaged 상태에 있는 파일들을 로컬 데이터베이스에 그 시점의 snapshot이 저장된다.

$ git commit

이 명령어를 입력하면 편집 프로그램(vi, nano..)이 실행되어 해당 commit의 제목과 내용을 입력 할 수 있다. 또한 -a 옵션을 사용하면 untracted 상태의 파일을 자동으로 add하여 staging area에 넣는다.

--amend옵션은 너무 일찍 commit했거나 어떤 파일을 누락했을 때 그리고 commit 메시지를 잘못 적었을 때 한다.

$ git commit --amend

diff(Staged와 Unstaged 상태의 변경 내용보기)

git diff 명령을 실행하면 staged 된 파일과 수정 후 아직 staged 상태가 아닌 파일을 비교해 볼 수 있다. staged 상태인 파일은 git diff --cached 또는 git diff --staged 옵션으로 확인한다.

$ git diff

ex) .gitignore 파일은 staged 상태이고 내용은 *.DS_Store라고 해보자. 이 파일에 .AppleDouble 이라는 내용을 한 줄 추가하고 저장 후 git diff를 한다.

diff --git a/.gitignore b/.gitignore
index 56266d3..4313710 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-*.DS_Store
+.AppleDouble

push

$ git push -u origin master

mv(파일이름 변경하기)

git에도 파일 이름을 수정하는 mv 명령어가 존재한다. README.mdREADME 로 바꿔보자.

$ git mv README.md README

사실 git mv명령은 아래 명령어를 수행한 것과 같다.

$ mv README.md README
$ git rm README.md
$ git add README

log(commit 히스토리 조회하기)

log 명령은 저장소의 commit history를 시간순으로 보여준다. 이어서 각 commit의 SHA-1 체크섬, name, e-mail, commit한 날짜, commit 메시지를 보여준다.

-p옵션은 각 commit의 diff 결과를 보여준다. 만약 여기에 -2를 추가하면 최근 두 개의 결과만 보여준다.
--oneline옵션은 각 commit하나를 한 줄로 보여준다.
--graph옵션은 그래프 형태로 commit을 보여준다.
--all옵션은 모든 commit을 보여준다.


siwon

$_$