[Do it! 5일 만에 끝내는 깃&깃허브 입문] 2장. 깃으로 버전 관리하기
[Do it! 5일 만에 끝내는 깃&깃허브 입문] 2장. 깃으로 버전 관리하기
“Do it! 5일 만에 끝내는 깃&깃허브 입문” 도서 바로가기
2장. 깃으로 버전 관리하기
2-1. 깃 저장소 만들기
- 저장소(repository): 깃으로 버전 관리를 할 때 필요한 폴더 안의 버전이 저장되는 공간
mkdir hello-git→cd hello-git→git init(초기화) ⇒ .git이라는 디렉터리 생성됨
2-2. 버전 만들기
깃의 작업 영역
| 작업 트리 | 스테이지 | 저장소 |
|---|---|---|
| 우리 눈에 보이는 디렉터리 | .git 디렉터리 안에 숨은 파일 형태로 있어 보이지 않음 | .git 디렉터리 안에 숨은 파일 형태로 있어 보이지 않음 |
| .git 디렉터리 ← git init 명령으로 만든 저장소 영역 | .git 디렉터리 ← git init 명령으로 만든 저장소 영역 | |
| 파일 수정, 저장 등의 작업을 하는 디렉터리 | 버전으로 만들 파일이 대기하는 곳 | 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳 |
스테이지와 커밋 이해하기
add: 파일을 작업 트리에서 스테이지에 넣을 때 사용하는 명령commit: 깃에서 버전을 만드는 명령
⇒ 작업 트리에서 문서 수정 → 수정한 파일 가운데 버전으로 만들고 싶은 것을 스테이지에 저장 → 스테이지에 있던 파일을 저장소로 커밋하면 버전이 만들어짐
작업 트리에서 변경 사항 만들기
git status: 깃 상태 확인- 출력되는 메시지:
On branch main: 현재 main 브랜치에 있음.No commit yet: 커밋한 파일이 아직 없음.nothing to commit: 현재 커밋할 파일이 없음.
- 출력되는 메시지:
스테이지에 변경 사항 올리기 - git add
‘스테이징(staging)’ 또는 ‘스테이지에 올린다’ 또는 ‘인덱스에 등록한다’ : 깃에게 버전 만들 준비를 하라고 알려 주는 것
스테이징한 파일 커밋하기 - git commit
‘커밋(commit) 한다’: 버전을 만드는 것
- 커밋 메시지 넣기:
git commit -m "message1"
스테이징과 커밋 한꺼번에 처리하기 - git commit -am
-am: all을 뜻하는-a옵션과 message를 뜻하는-m옵션을 함께 묶은 것. 따로 적용도 가능.
2-3. 커밋 내용 확인하기
커밋 기록 자세히 살펴보기 - git log
git log: 지금까지 만든 버전이 화면에 보이고 버전마다 설명도 함께 나타남- 커밋 해시(commit hash) 또는 깃 해시(git hash): 커밋을 구별하는 아이디
- 커밋 로그: git log 명령 입력했을 때 나오는 정보
변경 사항 확인하기 - git diff
- 파일의 변경 사항을 행(Line) 단위로 비교하여 보여주는 명령어
- 기능: 수정 내용 확인 → 파일에서 어떤 부분이 추가(+)되고 삭제(-)되었는지 대조함
2-4. 버전 만드는 단계마다 파일 상태 알아보기
tracked 파일과 untracked 파일
- tracked 파일: Git이 과거를 기억하고 변화를 지켜보는 파일
- untracked 파일: Git이 관여하지 않는 새로 만들어진 파일
$ git log --stat: —stat 옵션은 ‘statics’의 줄임말로 커밋과 관련된 여러 통계 보여줌
unmodified, modified, stage 상태
- 버전을 한 번이라도 만들었던 파일은 tracked 상태 → 파일이 tracked 상태라면 깃 명렁으로 현재 위치를 더 구체적으로 알 수 있음
- Tracked 파일의 3가지 상태
- Unmodified (수정되지 않음): 마지막 커밋 이후로 내용이 전혀 변하지 않은 상태. Git 저장소와 워킹 디렉터리의 파일 내용이 완벽히 일치.
- Modified (수정됨): 마지막 커밋 이후에 파일을 수정했지만, 아직 스테이징 영역에 올리지 않은 상태. Git은 변화를 감지했지만, 아직 “이 수정을 저장하겠다”는 의사가 전달되지 않음.
- Staged (커밋 대기): 수정된 파일을
git add명령어로 스테이징 영역(Index)에 올린 상태. 다음 커밋을 실행할 때 이 상태의 파일들이 새로운 스냅샷으로 기록됨.
- 상태 변화 과정 (Flow)
- 수정 시:
Unmodified→ 파일을 고침 →Modified - 추가 시:
Modified→git add실행 →Staged - 커밋 시:
Staged→git commit실행 →Unmodified(다시 초기 상태로)
- 수정 시:
2-5. 작업 되돌리기
작업 트리에서 수정한 파일 되돌리기 - git restore
: 파일의 내용을 과거로 되돌리는 것
스테이징 되돌리기 - git restore –staged
: 파일의 상태(커밋 대기 여부)만 이전으로 되돌리는 것
git reset HEAD^: 최신 커밋 되돌리기 → main의 최신 커밋 취소 & 스테이지에서도 내려감. 작업 트리에만 파일 남음.restore: 스테이징만 취소reset: 커밋 취소
특정 커밋으로 되돌리기 - git reset 해시
- reset에서 커밋 해시를 사용해 되돌릴 때 주의할 점
- 예를 들어,
reset A를 입력하면 이 명령은 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고, A커밋으로 이동하겠다는 의미. 최신 커밋을 가리키는 HEAD를 A로 리셋함. $ git reset --hard 복사한 커밋 해시
- 예를 들어,
커밋 변경 이력 취소하기 - git revert
git revert: 변경 사항만 취소하고 커밋은 남겨 두는 것reset명령을 사용한다면, 취소할 커밋의 해시가 아니라 되돌아갈 커밋 해시를 지정revert명령을 사용한다면, 취소할 커밋 해시를 지정
This post is licensed under CC BY 4.0 by the author.