파일명이 달라도 내용이 같으면 파일들은(index) 같은 object를 가리킨다
git은 파일을 add하면 파일의 내용을 SHA1 해시 알고리즘을 통하여 값을 만든다
그 값을 통하여 object 디렉토리 안에 내용들을 추가한다
commit 원리
tree-> 커밋한 시점에 파일명과 파일 내용을 담고 있음
parent-> 앞선 커밋의 내용들을 담고 있음
object 폴더에는 3가지가 있다
status 원리
working space내용과 index의 내용이 다르면 add를 안한상태이다(빨간modify)
index의 내용과 object(local repository)의 commit 안에 tree의 내용이
다르면 대기상태이다 (add는 했지만 commit은 안한상태 초록modify)
stash 원리
브렌치를 따서 작업하다가 커밋을 안한상태에서 마스터 브렌치로 가려하는 상황일때
마스터 브렌치로 가버리면 이전 브렌치에 수정사항이 마스터 브렌치에 영향을 끼치게 된다.
그래서 이런 상황일때 stash를 하고 마스터 브렌치로 가면 된다
마스터 브렌치에서 다시 이전 브렌치로 갔을때 stash 되있던걸 apply하면
이전 상황과 똑같이 된다.
brench 원리
fast-foward란 merge를 했을때 새로운 커밋을 생성하지 않고
merge대상의 커밋에서 병합이 되는것이다
head는 현재 브렌치와 그 브렌치의 최신 commit을 알려준다
어떠한 파일과 디렉토리를 가지고 있어야 되는가에 대한 정보는 트리가 알려줌
브렌치 머지할때 conflict는 같은 부분을 수정했을때 일어난다
다른부분은 저절로 병합된다
git reset --hard ORIG_HEAD
orig head를 통해 최신 명령을 취소할 수 있다
git diff working copy와 index의 내용을 비교함
2 way merge
base를 참고 안하고 2개의 merge를 병합
3 way merge
base를 참고하여 2개의 merge를 병합
3 way merge는 어떤장점