Scott Chacon & Ben Straub 님의 "Pro Git" 책을 정리한 포스팅 입니다.
1. 수정하고 저장소에 저장하기
파일의 상태
Tracked (unmodified, modified, staged)
- 이미 스냅샷에 포함돼 있던 파일입니다.
- 처음 저장소를 clone하면, 모든 파일은 tracked-unmodifed 상태입니다.
Untracked
- Staging area에 포함되어 있지 않은 파일입니다.
상태 확인
git status
Untracked 상태의 파일을 Stage (새로 추적)
git add README # 파일 또는 디렉토리 경로를 인자로 받습니다.
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
'Changes to be committed'
- staged 상태의 파일을 리스트업 합니다.
Tracked-modified 상태의 파일을 Staging
git add CONTRIBUTING.md # 파일 또는 디렉토리 경로를 인자로 받습니다.
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
'Changes not staged for commit'
- modified 상태의 파일을 리스트업 합니다.
- Tracked 상태이지만 staged 상태는 아닌 파일
파일 상태를 짤막하게 확인
git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
컬럼
- 영역별 상태를 표기합니다.
- 왼쪽 : Working Directory
- 오른쪽 : Staging Area
상태
- A : Staged 상태 (새로 생성한 파일)
- M : Modified 상태
- ?? : git이 추적하지 않는 새 파일입니다.
파일 무시
- git의 관리를 받지 않으려는 파일을 지정할 수 있습니다.
- 로그파일, 빌드 시스템이 생성한 메타데이터 등
- .gitignore 파일에 무시할 파일의 패턴을 적습니다.
$ cat .gitignore
*.[oa] # 확장자가 ".o"나 ".a"인 파일을 무시하라 (빌드 시스템이 만드는 오브젝트, 아카이브 파일)
*~ # '~'로 끝나는 모든 파일을 무시하라 (Emacs 같은 텍스트 편집기가 임시로 만드는 파일)
규칙
- 슬래시로 시작하면 하위 디렉토리에 적용되지 않는다.
- 디렉토리는 슬래시를 끝에 사용하는 것으로 표현한다.
- 느낌표로 시작하는 패턴의 파일은 무시하지 않는다.
# 확장자가 .a인 파일 무시
*.a
# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a
# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시
build/
# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/*.txt
# doc 디렉토리 아래의 모든 .pdf 파일을 무시
doc/**/*.pdf
Staged-Unstaged 상태의 변경 내용
git diff
git diff
- 마지막 커밋된 상태와 modified 상태의 차이를 보는 명령어 입니다.
- 아직 staging area에 추가되지 않은 파일이 대상입니다.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md # 변경전 버전 | 변경후 버전
index 5095bda..771378f 100644 # 변경전 체크섬 | 변경후 체크섬 | 파일 권한
--- a/CONTRIBUTING.md # --- : 변경전 파일의 경로와 이름
+++ b/CONTRIBUTING.md # +++ : 변경후 파일의 경로와 이름
@@ -1 +1 @@ # 허프 헤더 : 변경이 발생한 파일 내의 특정 영역
-My Project2-1 # 원본 파일 내용 : 이전 내용
+My Project2 # 새 파일 내용 : 변경된 내용
git diff --staged(cached)
git diff --staged
git diff --cached
- 마지막 커밋된 상태와 staging area에 있는 파일의 차이를 보는 명령어 입니다.
커밋
git commit -m "커밋 메시지"
- staged 파일을 스냅샷을 떠서 데이터베이스에 저장합니다.
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README
- 체크섬 : 463dc4f
- 수정한 파일 및 추가된 라인 : 2 files changed, 2 insertions(+)
git commit -am "커밋 메시지"
- tracked 상태의 파일을 모두 staging area로 옮기고, 커밋을 수행합니다.
파일 삭제
git rm
- 파일을 Working Directory에서 삭제하고 해당 삭제 내용을 Staging Area에 추가합니다.
파일 이름 변경
git mv
- 파일의 이름을 변경하거나 위치를 이동할 때 사용합니다.
출처
'VCS > Git' 카테고리의 다른 글
[Pro Git] 2-4. Git의 기초: 되돌리기 (0) | 2024.01.14 |
---|---|
[Pro Git] 2-3. Git의 기초: 커밋 히스토리 조회하기 (1) | 2024.01.14 |
[Pro Git] 2-1. Git의 기초: Git 저장소 만들기 (1) | 2024.01.14 |
[Pro Git] 1-6. 시작하기: Git 최초 설정 (1) | 2024.01.13 |
[Pro Git] 1-3. 시작하기: Git 기초 (0) | 2024.01.13 |