[Git] 기본 사용법(in Local Repo)
git init : 초기화
Git으로 버전 관리를 하려면 레파지토리를 초기화해야 함 - git init 명령어로 초기화
성공적으로 초기화가 완료되면 .git이란 이름의 디렉터리가 생성됨 - 현재 폴더와 관련된 레파지토리 관리 정보가 저장됨
> Git에서는 해당 레파지토리와 관련된 working tree(워킹 트리)라고 부름
$ mkdir git-jamie
$ cd git-jamie/
$ git init
Initialized empty Git repository in /Users/hs/Documents/git/git-jamie/.git/
$ ls -a
. .. .git
working tree
레파지토리에 등록된 파일 변경 내역을 관리
파일을 이전 상태로 되돌리고 싶은 경우, 레파지토리로부터 이전 파일 상태를 확인하고 working tree에 전개
$ cd .git
$ ls
HEAD config description hooks info objects refs
git status : 상태 확인
working tree 또는 레파지토리에 대응되는 조작을 하면 상태가 차례로 변경됨
git status 명령어로 현재 상태를 확인하면서 Git 명령어를 입력하는 것이 기본
아래 설명
- 현재 브랜치(branch)는 master라는 이름을 가졌다.
- 커밋(commit; working tree에 있는 모든 파일의 특정 시점 상태를 기록)이 없다 = 지금 작성한 레파지토리에 어떤 파일의 상태도 기록되어 있지 않다.
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
README.md 파일을 추가해보고, 상태 확인해보기
아래 설명
- Untracked files : 추적하고 있지 않은 파일 - 추적을 원한다면(Git 레파지토리로 관리하길 원한다면) add가 필요
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
git add : Stage 영역에 파일 추가
작성한 파일을 Git 레파지토리에서 관리하려면 git add 명령어로 스테이지(인덱스) 영역이라 불리는 장소에 파일을 등록
스테이지(인덱스) 영역 commit 하기 전의 임시 영역
add시 Changes to be commited에 파일이 표시됨
$ git add README.md
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
git commit : 변경 내용 기록
스테이지 영역에 기록된 파일들을 실제 레파지토리의 변경 내역에 반영
이 기록 기반으로 파일을 working tree에 복원하는 것이 가능함
한 줄(간단한) 메시지 커밋하기
-m 옵션 뒤에 한 줄 간단히 적기
커밋이 완료되면 working tree의 상태는 커밋된 최신 상태. 변경 내역이 이미 반영되었으므로 새로운 변경 내역이 없다는 것을 확인할 수 있음(git status)
$ git commit -m "[Add] Readme"
[master (root-commit) 610b929] [Add] Readme
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
$ git status
On branch master
nothing to commit, working tree clean
여러 줄(상세한) 메시지 커밋하기
아래와 같은 형식을 지켜 작성시, log 명령어 또는 툴 등에서 자세한 commit 메시지가 출력됨
- 첫 줄 : commit으로 인한 변경 내용을 한 줄로 요약해서 작성
- 두 번째 줄 : 공백
- 세 번째 줄 : 변경과 관련된 내용을 상세하게 기록
- (주석처리 된 줄을 굳이 지우진 않아도 됨)
#기호로 주석처리된 줄의 'Change to be commited'란에서 이번 commit에 포함된 파일 등을 확인할 수 있음
저장하지 않고 종료시, commit이 되지 않음
$ git commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
# modified: README.md
#
git log : commit 확인
누가 언제 commit 또는 merge를 했는지, 어떤 변경이 발생했는지 등을 확인할 수 있음
$ git log
commit 610b9297f4f2907ec532b92336c3b65165a80d33 (HEAD -> master)
Author: jamie <jamie@example.com>
Date: Mon Mar 9 14:31:49 2020 +0900
[Add] Readme
commit 메시지의 첫 줄(요약 줄)만 확인
$ git log --pretty=short
commit 610b9297f4f2907ec532b92336c3b65165a80d33 (HEAD -> master)
Author: jamie <jamie@example.com>
[Add] Readme
선택한 디렉터리 또는 파일의 로그만 확인
파일명 or 디렉터리명 명시, 여러 개 가능, *문자 사용 가능
$ git log README.md
commit 610b9297f4f2907ec532b92336c3b65165a80d33 (HEAD -> master)
Author: jamie <jamie@example.com>
Date: Mon Mar 9 14:31:49 2020 +0900
[Add] Readme
/* 첫 줄만 출력 */
$ git log --pretty=short README.md
변경된 내용을 출력
한 줄만 출력과 마찬가지로 특정 파일(또는 디렉터리)만 지정도 가능함
$ git log -p
commit 610b9297f4f2907ec532b92336c3b65165a80d33
Author: jamie9504 <jamie9504@kakao.com>
Date: Mon Mar 9 14:31:49 2020 +0900
[Add] Readme
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
git diff : 변경 내역 확인
working tree, Stage 영역, 최신 commit 사이의 변경을 확인할 때 사용
working tree와 스테이지 영역의 차이를 확인
현재 working tree와 stage 영역 사이의 차이를 확인할 수 있음
+ : 추가된 것, - : 제거된 것
$ echo "# Jamie Git" > README.md
$ git diff
diff --git a/README.md b/README.md
index 792d600..55dcc07 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-#
+# Jamie Git
$ git add README.md
$ git diff # 스테이지 영역에 모두 추가되어, 아무것도 표시되지 않음
working tree와 최신 commit과의 차이를 확인
commit 명령 실행 전 git diff HEAD 명령을 실행하면, 현재 commit과 이전 commit의 차이를 한 눈에 확인할 수 있음
HEAD : 현재 작업하고 있는 브랜치의 최신 commit을 참조하는 포인터
$ git diff HEAD
diff --git a/README.md b/README.md
index 792d600..55dcc07 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-#
+# Jamie Git