[Git] 버전 관리(Version Control) - git init, add, commit, log, restore, revert

0. 버전 관리


버전이란?

: 문서를 수정하고 저장할 때마다 생기는 것

: 깃에서 버전 관리하면 원래 파일 이름 유지하면서 변경 시점마다 변경 내용을 저장

 

 

  • 작업 트리(Working tree 또는 working directory)

: 파일을 수정, 저장하는 곳

: 버전으로 만들어지기 전 단계

 

 

  • 스테이지(Stage 또는 Staging area)

: 버전으로 만들 파일이 대기하는 곳

 

 

  • 저장소(Repository)

: 버전이 저장되는 곳

 

 

버전 생성 단계

  1. 작업 트리에서 문서 수정
  2. add 명령을 통해 수정된 파일 중 버전으로 만들고 싶은 파일을 스테이지에 넣기
  3. commit 명령을 통해 버전 생성
  4. 스테이지에 대기하던 파일이 모두 저장소에 저장됨

 

 

파일 상태

- untracked files

: 한 번도 커밋하지 않았으므로 수정 내역을 추적하지 않음

 

 

- tracked files

: 깃이 추적하고 있음

 

 

 

1. 깃 저장소(repository) 생성 및 초기화


새로운 디렉터리 생성

: 'hello-git' 이라는 이름의 디렉터리 생성 후, 디렉터리 안으로 이동

mkdir hello-git
cd hello-git

 

 

$ git init

: 현재 디렉터리(hello-git)에서 깃을 사용할 수 있도록 초기화

git init

: 'Initialized empty Git repository ...' 라는 메시지 나타나면 깃 사용 가능

 

 

디렉터리 내용 확인

: ls 명령을 통해 디렉터리 안의 내용 확인

ls -al

: '.git' 라는 디렉터리가 생성되어 있음

 

 

 

2. 버전 생성


$ git status

: 깃의 현재 상태 확인

git status

On branch master : 현재 master 브랜치에 있음

② nothing to commit : 현재 커밋할 파일이 없음

 

 

  • 'hello1.txt' 라는 이름의 파일 생성 후 내용 작성하면,

Untracked files : 버전을 한 번도 관리하지 않은 파일

 

 

$ git add

: 수정한 파일을 스테이지(Stage)에 올림

: 깃에게 버전 만들 준비를 하라고 알려줌

: 여러 개의 파일을 스테이징하려면 각각 add 해야 함

git add 파일이름

 

 

  • 'hello1.txt' 파일을 스테이지에 올리면,

Changes to be commited : 새 파일 'hello1.txt'를 앞으로 커밋할 것이다

 

 

$ git commit

: 스테이징한 파일의 버전 만듦(커밋)

: 커밋할 때는 버전의 변경 사항을 확인할 수 있도록 메시지 함께 기록

: 여러 개의 파일을 동시에 커밋할 수 있음

 

 

  • 옵션
-m 커밋과 함께 저장할 메세지 작성
-a 스테이징과 커밋을 한꺼번에 처리.
But, 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용 가능
--amend 방금 커밋한 메시지 수정
git commit -m "메시지"

 

 

  • 'hello1.txt' 파일을 커밋하면,

파일 1개가 변경되었고(1 file changed), 파일에 1개의 내용 추가됨(1 insertion(+))
버전으로 만들 파일이 없고(nothing to commit), 작업 트리도 수정 사항 없이 깨끗(working tree clean)

 

 

  • 스테이징과 커밋 한꺼번에 처리하려면, (한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용 가능)

 

 

3. 커밋 내용 확인


$ git log

: 저장소에 커밋했던 기록 확인

: 커밋을 만든 사람, 시간, 커밋 메시지 볼 수 있음

 

 

  • 옵션
-p 버전간의 차이점 비교
--stat  각 커밋마다 어떤 파일이 연루되어 있는지 확인
--all 모든 브랜치 확인
--oneline 한 줄에 한 커밋씩 보여줌
--graph 그래프 형태로 표시
--branches 브랜치마다 최신 커밋을 한 눈에 살펴볼 수 있음
git log

① 커밋 해시(commit hash) 또는 깃 해시(git hash) : 커밋을 구별하는 아이디

② 커밋 로그 : git log 명령을 입력했을 때 나오는 정보

 

 

$ git diff

: 변경 사항 확인

: 작업 트리, 스테이지에 있는 파일, 저장소에 있는 최신 커밋 비교

git diff

 

 

  • 'hello1.txt' 파일에서 "2"를 제거하고 "two" 추가하면,

 

 

 

4. 작업 되돌리기


$ git restore

: 스테이징하지 않은 상태에서 작업 트리에서 수정한 파일 되돌리기

 

 

  • 옵션
--staged 스테이징 되돌리기
git restore 파일이름

 

 

  • 'hello1.txt' 파일에서 restore하면,

"two" 사라지고 원래대로 돌아감

 

 

  • 'hello1.txt' 파일에서 스테이징 되돌리면,
git add hello1.txt
git restore --staged hello1.txt

 

 

$ git reset

: 스테이징과 커밋 되돌리기

 

 

  • 옵션
HEAD^ 가장 마지막에 한 최신 커밋 취소하고 unstaged 상태로 작업 디렉터리에 보관
--soft HEAD^ 커밋 취소하고 파일을 staged 상태로 작업 디렉터리에 보관
--mixed HEAD^ 커밋 취소하고 unstaged 상태로 작업 디렉터리에 보관
--hard HEAD^ 모든 변경 사항을 버리고 이전 커밋 상태로 강제로 되돌림. 스테이징 영역도 비움
커밋해시 그 이후에 생긴 커밋 삭제하고 특정 커밋으로 되돌림
git reset

 

 

  • 'hello1.txt' 파일에서 "Message3" 커밋한 후 최신 커밋 되돌리려면,
git commit -am "Message3"
git reset HEAD^

 

 

  • 'hello1.txt' 파일에서 특정 커밋(Message2)으로 되돌리려면,

Message2의 커밋 해시를 git reset 뒤에 입력

 

 

$ git revert

: 커밋 변경 이력 취소

: 변경 사항만 취소하고 커밋했던 기록은 남겨둬야 할 때

: revert 명령어 입력하면 기본 편집기가 자동으로 나타나면서 커밋 메시지 입력할 수 있음

: revert 할 때는 건너뛰기 불가능(충돌 발생). 반드시 이전 커밋부터 하나씩 revert 해야 함!

git revert 커밋해시

 

 

  • 'hello1.txt' 파일에서 이전 커밋으로 취소하려면,

 

※ git reset 커밋 해시 : 되돌아갈 커밋 해시 지정

    git revert 커밋 해시 : 취소할 커밋 해시 지정