Git 기초

|

Git의 기초에 대해 정말 잘 설명되있는 페이지를 읽고 요약만 정리하고자 합니다. 원본은 아래링크를 참고하세요.
시작하기-Git-기초

SVN vs Git

SVN은 Commit 시점에 변화된 파일만 관리합니다.
SVN-Flow

Git은 Commit 시점의 스냅샷을 관리합니다. 변화되지 않은 파일도 해당 스냅샷의 링크로 저장합니다. Git-Flow

Git 특징

  • 거의 모든 명령을 로컬에서 실행합니다.
  • 데이터를 저장전 SHA-1 해시를 구하고 그 체크섬으로 데이터를 관리합니다.(무결성)
  • Commit한 데이터는 추가하기만 하고 삭제하지 않습니다.

Git의 저장구조, 상태, 상태전이

git 명령어에 따른 상태전이표입니다.

Git-Structure

상태 설명
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