Git 뿌시기 - reset, 다양한 명령어들의 원리

5368 단어 gitgit

git reset

git reset

reset 명령어와 함께 명시한 커밋버전까지는 살려두고, 이전 커밋 버전으로 돌아가는 기능, 주로 사용하진 않음 -> git reset (Version-3)한 실행화면

git을 스스로 공부하는 방법!

구글내의 검색결과에 따른 명령어의 중요도 순위
가장 기초에 충실하면서, 중요한 기능들을 추가해나가는 방식으로 학습하는 법이 매우 중요함.

git commit --help

명령어를 통해 커밋과 관련된 다양한 기능과 그에 대한 명세를 확인 가능함

git commit -a

: 수정, 삭제한 파일을 자동으로 스테이지로 올림

git commit -m "commit message"

: 에디터를 사용하지 않고 커밋 메시지 바로 입력 가능

git의 원리

지금까지 공부한 명령어들의 메커니즘, 깃의 원리에 대해서 파해쳐 보자.

gistory


gistory 설치 후

다음의 명령어를 통해 화면 확인

.git 내부의 존재하는 파일들의 역할들을 통해 git의 내부원리를 이해해보자

f1.txt 파일 생성 후 gistory를 확인해 보면![]
가장 위에 2가지 파일이 생성되었음을 확인할 수 있음.
objects에는 a라는 내용이 담겨있음을 알 수 있고, index에는 이름이 담겨 있음

f2.txt 생성 후 index, objects 확인

f1.txt를 f3.txt로 복사 후


f3.txt가 같은 object(객체)를 가리키고 있음을 알 수 있음
-> 이를 통해 깃은 파일의 이름이 달라도 내용이 같으면, 같은 object를 가리킴

objects 파일명의 원리

내용을 기반으로 하여 파일의 이름을 결정하는 메커니즘의 원리

깃은 우리가 저장한 파일의 내용을 sha-1이라는 해쉬 알고리즘을 통해 파일의 이름을 형성해냄
그리고 앞에서 2글자를 때 aa 디렉토리 안에 f4c61d~~로 이름 저장

깃은 우리의 파일의 내용을 보고 이를 압축하고 이 압축한 결과를 sha-1 해쉬를 통해 나오는 값에 해당하는 디렉토리와 파일을 objects안에 만들고 그 압축한 결과를 저장하고, index에 이름 저장

commit의 원리


commit후에 생기는 변화

5개의 파일 생성 확인 가능


-commit 메세지의 정보가 마치 내용처럼 object(객체)로 저장됨을 확인 가능


방금 커밋한 결과는 object 파일로 저장되고 그 안에 있는 tree라는 값에는 현재 커밋한 내용의 파일의 이름과 내용이 담겨 있음

f2.txt내용 수정

커밋 후 결과 확인

parent가 생겼음을 알 수 있고, 해당 커밋 object를 통해 이전 커밋 확인 가능하며

첫번째 커밋과, 두번째 커밋결과의 tree가 다름을 알 수 있음

첫번째 커밋

두번째 커밋

커밋에 담겨 있는 정보들

이전 커밋이 누구인가(parent)
커밋이 일어난 그 시점의 작업 디렉토리의 파일의 이름과 파일의 이름이 담고 있는 내용 정보(tree)

  • 각각의 버전마다 서로 다른 트리를 담고 있고 그 버전이 담고 있는 트리를 통해 그 버전이 만들어진 시점에 프로젝트 폴더들에 대한 상태를 확인 가능함(마치 스냅샷의 개념!)

d1이라는 새로운 디렉토리 생성

커밋 후 각각의 커밋 이전 커밋과 tree를 통해 해당 시점의 파일들 확인 가능

status의 원리

index라는 파일의 원리와 status의 동작원리!

스테이지가 비어있을때, 커밋 요청을 보내면 커밋할게 없다는 것을 깃은 어떻게 알아차릴까?

f2.txt가 수정되었음을 깃은 해쉬 아이디를 통해 수정되었음을 알 수 있음

f2.txt를 add후에는 커밋대기상태로 변경되며

이러한 add와 commit의 경계점, 즉 스테이지에 올라와있는 정보를 구분하는 방법
깃의 입장에서는 index라는 파일이 가리키고 있는 f2.txt의 내용과 우리가 수정한 f2.txt의 내용이 같으므로, 파일이 커밋 대기상태임을 알 수 있다.

추가로 깃은 index의 트리와 가장 최신 커밋의 트리가 가리키는 f2.txt의 내용이 다르다는 것을 보고 즉, 인덱스의 트리 내용과 마지막 커밋의 트리가 가리키고 있는 내용이 다르므로, index에 add되어서 커밋 대기상태이다라는 것을 알 수 있음

git working directory vs index vs repository

좋은 웹페이지 즐겨찾기