[GIT] git의 원리-2

NAEMAMDAEROG·2021년 12월 7일
0

branch의 원리

  • git init을 하면 HEAD 파일이 생성된다.
  • HEAD 파일은 refs/heads/master를 가리키고, 그건 최근 commit한 object의 id를 가리킨다.
    (HEAD --> refs/heads/master --> 최근 commit한 파일)
  • branch를 생성하면 refs/heads/새로 생성한 branch 이름(ex. exp)으로 파일이 생성된다.
  • rm .git/refs/heads/exp 하면 exp branch 삭제된다.
  • git checkout exp 하면 HEAD 파일은 refs/heads/exp를 가리킨다.

reset의 원리

  • git reset --hard 돌아가고 싶은 commit의 id : 그 이후의 commit은 삭제된다.
  • reset은 현재 checkout하고 있는 branch의 현재 commit을 바꾸는 걸 의미한다.
  • ORIG_HEAD는 삭제한 commit 파일을 가지고 있다. git은 파일을 삭제하는 위험한 명령을 실행하기 전에 ORIG_HEAD에 현재 branch의 header가 가지고 있는 최신 commit을 저장해두고 명령을 실행한다.
  • logs/refs/heads/master는 commit의 순서를 가지고 있다.
    (ex. 첫 번째 commit에서 두 번째 commit, reset 했다면 삭제된 commit에서 현재 commit으로의 순서)
  • git reset --hard ORIG_HEAD : reset을 취소할 수 있다.
  • git reflog : 방금까지 한 일들의 commit이 기록되어 있다. 그 곳에서 HEAD@{숫자} 가지고 git reset --hard HEAD@{숫자}로도 reset을 취소할 수 있다.
  • git reset에 옵션을 주지 않으면 --mixed로 작동한다.
  • git reset --hard : 뒤에 id 적지 않으면 최신 commit 상태로 돌아간다.

reset의 options

  • git diff : working copy와 index의 내용을 비교할 수 있다.

merge & conflict의 원리

  • kdiff3 : merge를 도와주는 도구. 설치해야 한다.
  • git config --global merge.tool kdiff3 : merge 명령을 실행할 때 kdiff3가 작동된다.
  • git mergetool : merge 할 수 있는 창이 뜬다.
    • base : merge 충돌이 일어나는 파일의 부모. 채택하려면 'A'.
    • local : merge 하는 branch의 파일. 채택하려면 'B'.
    • remote : merge 당하는 branch의 파일. 채택하려면 'C'.
    • merge conflict에서는 수정이 안되므로 어떤 거(A,B,C 중에 하나)라도 누른 후에 직접 내용 수정할 수 있다. 저장하고 나오면 내가 직접 수정한 내용으로 merge 되어 있다.
  • merge 끝난 후에 commit 해준다.(선택사항)

2-way merge & 3-way merge

  • 2-way merge : base는 빼고 나와 merge할 파일만을 고려한다. merge 할 때 같은 부분은 충돌이 나지 않지만 다른 부분에선 충돌이 일어난다.
  • 3-way merge : merge 하려는 파일, base 파일, merge 당하는 파일을 비교한다. base를 기준으로 두 파일을 비교한다. base에 있고 둘 중 하나의 파일이 수정됐다면 수정된 부분이 최종 merge되는 파일에 들어간다. base에 있고 두 파일 다 있다면 그 부분은 넣는다. base와 두 파일 다 다르다면 충돌이 일어난다.

출처 : 생활코딩 - 지옥에서 온 git
https://opentutorials.org/course/2708/15296

profile
Blockchain & Programming 공부 기록

0개의 댓글