개발 과정에서 수정되는 코드 변경사항을 작업자가 모두 기억하고 기록하는 것은 불가능하다.
코드의 변경 내용과 시점을 기록해 두는 것이 커밋이다.
이 커밋이 코드를 과거 작업 시점으로 쉽게 되돌릴 수 있는 시작점이 된다.
git 이전의 버전 관리 도구인 SVN은 파일이 수정되면 수정된 파일의 복사본을 생성하여 관리를 했었다. 복사본이 많아지면 전체 파일의 용량도 늘어나고 중복된 부분도 많이 발생하여 여러모로 불편하고 효율적이지 못한 부분이 있었다.
그에 비해, git은 전체 파일 중에 수정된 부분만 떼어다가 따로 추적하기 때문에 동일한 파일을 중복적으로 관리 하지 않아도 된다.
오직 변경 이력과 시점을 커밋 단위로 관리한다.
스테이징 - 커밋을 위하여
새 파일 생성
폴더를 생성하고, git 초기화를 한 후 파일을 추가해 보자.
> mkdir proj-add
> cd proj-add
> git init
Initialized empty Git repository in /Users/Username/Documents/temp/git-projects/proj-add/.git/
proj-add 폴더를 생성하고, git init을 실행하여 변경되는 내용 추적을 시작했다.
해당 폴더에 비어있는 html 파일 하나를 추가한다.
> touch index.html
git status 로 상태 확인을 해 본다.
> git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
untracked 파일이 있고 커밋 할 내용이 없다고 나온다.
이제 커밋을 할 준비가 된 것이다.
스테이지 영역에 파일 추가
커밋을 하려면 먼저 git이 알수 있도록 파일을 추가하여 스테이지 영역에 반영해야 한다.
파일을 추가하여 스테이지 영역에 반영하는 명령어는 git add 이다.
워킹 디렉토리에 추가되는 모든 파일은 이 과정을 거쳐야 한다.
워킹 디렉토리의 모든 파일과 폴더를 git이 알수 있도록 스테이지 영역에 반영하려면 아래와 같이 입력한다.
> git add .
이렇게 모든 파일을 staged 상태로 만들었으니 한번 상태를 확인해보자.
> git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
index.html 파일이 커밋을 할 준비가 되었다고 나온다.
이제 index.html 파일의 상태는 tracked이면서 staged 가 된 것이다.
스테이지 영역에서 파일 추가 취소
스테이지 영역에 추가된 파일을 untracked , unstaged 상태로 변경하려면, 위의 이미지에 나와 있듯이 rm 명령을 이용한다. rm 은 remove이다.
> git rm --cached index.html
--cached 옵션은 스테이지의 캐시 목록에서 파일을 삭제한다.
취소한 후 git status 명령으로 상태를 확인해보니 Untracked files: 항목에 index.html 이 있는 것을 확인 할 수 있다.
> git rm --cached index.html
rm 'index.html'
> git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
nothing added to commit but untracked files present (use "git add" to track)
rm과 reset의 차이
rm은 커밋하기 전, reset은 커밋한 후 되돌릴 때 사용한다.
커밋된 걸 rm으로 지우면, 삭제되면서 동시에 삭제된 이력이 깃의 변경 이력에 남는다.
reset으로 제거하면 변화된 기록을 남기지 않는다.
이름 변경
혹시 파일명을 변경해야 한다면 아래와 같이 변경한다.
> git mv 파일이름 새파일이름
커밋하기 - 발자국을 남기다
커밋을 하기 전에 이해하고 넘어갈 개념이 있다.
HEAD
가장 마지막 커밋의 위치를 가리키는 포인터이다. 따라서 최소 한번 이상 커밋을 해야 HEAD가 존재한다.
스냅샷
이름 그대로 git 상태가 변경된 부분만 사진을 찍어 저장하여 관리하는 방식을 말한다.
HEAD가 가리키는 커밋을 스테이지 영역과 비교하여 새로운 커밋으로 기록한다.
커밋을 하기 위해서는 스테이지 영역에 변경 사항이 있어야 한다. 깃은 스테이지 영역의 변경 사항을 기준으로 스냅샷을 만들어 커밋힌다.
파일이 스테이지에 추가되었다면, 커밋을 실행한다.
> git commit
이렇게 입력하면 커밋 메시지를 입력할 수 있는 에디터가 실행된다. 기본적으로 vi 에디터가 실행된다.
메시지를 입력하고 저장 후 vi 에디터를 종료하면 커밋이 완료된다.
-m 옵션을 추가하면, vi 에디터를 통하지 않고 커밋 메시지를 커멘드라인에서 바로 입력을 할 수도 있다.
> git commit -m '커밋 메시지 입력'
add와 commit을 한번에
git add 로 스테이지에 등록된 이후에 파일이 수정되면, modified 상태가 되는데 이 때도 스테이지에 등록을 해줘야 한다.
파일이 수정될 때 마다 git add , git commit 를 반복해서 입력하는건 엄청 번거로운 일이다.
add 와 commit 을 한번에 하려면 아래와 같이 -a 옵션을 추가한다.
> git commit -a
초기에 한번 파일이 추가(add)된 이후에는 이 두개의 옵션을 함께 입력하면 된다.
git commit -am '커밋 메시지 입력'
이렇게 커밋을 하면 내가 작업한 파일이 역사를 쓰기 시작한 것이다.
하지만 아직까지 내 컴퓨터 안에 머물고 있는 것이기 때문에 절반의 역사라고 할 수도 있겠다.
git 관련 포스트
2022.09.23 - [Dev.] - [git] 한번 제대로 써보자
[git] 한번 제대로 써보자
지금까지 git은 주로 GUI 클라이언트인 소스트리(SourceTree)를 통해 사용했다. 대부분 커밋, 머지, 커밋, 머지의 반복이었다. 그것만으로도 git을 사용하는데 큰 불편함을 느끼지 못했다. 그러다가 실
littleneedle.tistory.com
2022.09.24 - [Dev.] - [git] 설치 및 초기 설정
[git] 설치 및 초기 설정
설치 git을 사용하기 위해서 먼저 로컬 컴퓨터에 git을 설치한다. Homebrew를 이용한 설치 homebrew는 MacOS에서 패키지 관리를 위해 사용한다. homebrew를 처음 설치한다면 homebrew 사이트의 설치하기 명령
littleneedle.tistory.com
2022.09.27 - [Dev.] - [git] 작업 영역과 상태
[git] 작업 영역과 상태
git 작업 영역과 상태 구분 git 설치가 완료되면, 초기화를 진행한 후, 브랜치를 생성하고, 작성한 코드를 git에 추가하고, 추가한 코드를 로컬 저장소에 반영하는 과정을 거치며 진행한다. 앞의 로
littleneedle.tistory.com
'IT & Dev.' 카테고리의 다른 글
M1 맥북 안전모드(Safe mode) 부팅하기 (10) | 2023.01.04 |
---|---|
[git] 사례별 주요 명령어 모음 (2) | 2022.11.04 |
[git] 작업 영역과 상태 (0) | 2022.09.27 |
맥 개발 환경 세팅 ( iTerm2 + Oh my zsh + powerlevel10k ) (0) | 2022.09.26 |
[git] 설치 및 초기 설정 (0) | 2022.09.24 |