Git 기초
23 Jan 2017 | gitGit의 기초에 대해 정말 잘 설명되있는 페이지를 읽고 요약만 정리하고자 합니다. 원본은 아래링크를 참고하세요.
시작하기-Git-기초
SVN vs Git
SVN은 Commit 시점에 변화된 파일만 관리합니다.
Git은 Commit 시점의 스냅샷을 관리합니다. 변화되지 않은 파일도 해당 스냅샷의 링크로 저장합니다.
Git 특징
- 거의 모든 명령을 로컬에서 실행합니다.
- 데이터를 저장전 SHA-1 해시를 구하고 그 체크섬으로 데이터를 관리합니다.(무결성)
- Commit한 데이터는 추가하기만 하고 삭제하지 않습니다.
Git의 저장구조, 상태, 상태전이
git 명령어에 따른 상태전이표입니다.
상태 | 설명 |
---|---|
Modified | 작업 폴더에서 수정후 Stage에 올리지 않은 상태 |
Staged | 수정한 파일을 Stage에 올려 Commit할 스냅샷을 만든 상태 |
Committed | Stage의 파일을 git 저장소에 commit한 상태 |
예제
아래 명령어를 통해 두 파일을 저장소에 만들었습니다.
$ echo 'v1' > 1.txt | echo 'v1' > 2.txt
$ git add 1.txt
$ echo 'v2' > 1.txt
git status
로 현재 저장소의 상태를 볼 수 있습니다.
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: 1.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: 1.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
2.txt
1.txt는 새로 생성되어 ‘v1’이란 내용으로 stage에 올라가 있는 상태이고 로컬엔 ‘v2’로 수정되었습니다.
2.txt는 새로 생성되어 아직 로컬에만 있는 상태로 ‘Untracked files’로 표시됩니다.
위 상태에서 stage의 1.txt파일을 unstage하려면 git reset HEAD 1.txt
로 실행가능합니다.
위 상태에서 1.txt의 내용을 다시 ‘v1’으로 돌리려면 git checkout 1.txt
로 실행가능합니다.
1.txt를 commit하고 나머지 파일을 stage에 올린 후 1.txt를 다시 수정해보겠습니다.
$ git commit -m '1.txt commit'
$ git add .
$ echo 'v3' > 1.txt
다시 상태를 보면 아래와 같습니다.
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: 1.txt
new file: 2.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: 1.txt
현재 1.txt의 각 내용은 저장소별로 아래와 같습니다.
Working Directory | Staging Area | Git Repository |
---|---|---|
v3 | v2 | v1 |
git diff
명령을 통해 아래와 같이 확인할 수 있습니다.
$ git diff 1.txt
diff --git a/1.txt b/1.txt
index 8c1384d..29ef827 100644
--- a/1.txt
+++ b/1.txt
@@ -1 +1 @@
-v2
+v3
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory.
$ git diff HEAD 1.txt
diff --git a/1.txt b/1.txt
index 626799f..29ef827 100644
--- a/1.txt
+++ b/1.txt
@@ -1 +1 @@
-v1
+v3
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory.
Comments