본문 바로가기

시스템/Git, Docker

git (init , add, commit, reset) 설명

git commit 과정 구조

Contents

1) git init , git add, git commit 

2) git reset

3) git reset vs git restore


▶ git init , git add, git commit 

1) git init 명령을 실행하면 git 저장소가 생겨나고 HEAD는 아직 없는 브랜치를 가리킨다. 포인터가 생성.

2) git add 명령을 하면 Working Directory 내용을 Index로 복사한다(혹은 Statging 한다).

 

3) git commit 명령을 하면 master가 커밋 객체를 가리키게 한다. 포인터가 드디어 가리킨다.

4) 파일을 수정한 후 다시 git commit 하면(위의 1 ~ 3 절차를 다시 반복하면) 아래와 같이 된다.

   즉, master가 새로운 커밋 객체를 가리킨다.

※ git commit --amend

더보기

커밋한 내용을 빼먹었을 떄 --amend 옵션을 쓸 수 있다.

$ git add forgotten_file  // 추가 Staging

$ git commit --amend   // 편집기 창이 열리면서 Commit 메시지를 수정할 수 있게 된다.

 

▶ git reset

1. HEAD가 가리키는 브랜치를 옮긴다. (--soft 옵션이 붙으면 여기까지)

   즉, commit 명령을 되돌린다.

2. Index를 HEAD가 가리키는 상태로 만든다. (--hard 옵션이 붙지 않았으면 여기까지)

  즉, add 명령도 되돌린다.

3. 워킹 디렉토리를 Index의 상태로 만든다.

즉, Local 수정 한 것도 이전 Commit 상태로 되돌린다(사용상에 주의).

 

정리

명령 설명
--soft HEAD^ commit 명령을 되돌린다 (커밋 되돌림)
--mixed HEAD^ add 명령도 되돌린다 (커밋, 스테이징 되돌림)
--hard HEAD^ Local 수정 한 것도 이전 Commit 상태로 되돌린다 (커밋, 스테이징, 로컬 수정 되돌림)
git push -f origin "branch 명" 원격 저장소 또한 커밋 되돌린다

※ 모자(^)는 최근 1개 되돌릴 수 있고, 물결(~n)은 숫자를 지정해 줄수 있어 여러개 되돌릴 수 있다.

 

 

 git reset vs git restore

- git reset은 Staging 혹은 Commit 한것을 되돌린다(Working Directory는 변경되어 있다)

- git restore는 Working Directory의 수정내용을 복구한다. --staged 옵션을 추가하면 Staging 된 것도 되돌린다.

 

※ git restore는 이전에 git checkout 으로 사용되었었다. https://git-scm.com/book 사이트에는 여전히 git checkout으로 되어 있다. v2.23 부터 변경되어다고 한다. 그전에 생성된 메뉴얼인가 보다)

 

※ 수정 파일이 Staging 되어 있는 상황에서,  git reset 과 git restore --staged 결과는 같지 않다. 전자는 Working Directory는 변경하지 않는체 Unstaging 하고, 후자는 Unstaging 하면서 Working Directory도 되돌린다. 

git reset                = Unstaging

git restore --staged = Unstaging + Working Directory restore

 


[Reference] 

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0

https://0urtrees.tistory.com/44

반응형