본문 바로가기
git

<10> 생활코딩 - GIT

by ChaeLOTUS 2022. 12. 2.
728x90
Git - 원리 : working copy & index & repository

git reset 이라는 명령을 사용할 때 우리가 사용할 수 있는 옵션이 몇가지가 있다.

메뉴얼을 먼저 보자. git reset --help

많은 옵션 중 주로 많이 사용되는 것이 soft,mixed,hard가 있다.

 


reset의 세가지 옵션들이 각각 무엇을 리셋 하는가

working derectory
working tree
woking copy
(실제 작업을 진행하는 곳)
index
staging area
cache
( git add를 했을 때 그것이 포함되는 곳)
repository
history
tree
( 실제로 버전,커밋들이 저장되는 곳)
    git reset --soft
  git reset --mixed
git reset --hard

 

 

Git - 원리 : merge & conflict(충돌)

충돌이라는 것이 일어났을 때 깃 내부적으로 어떠한 변화를 겪게 되는가.

 

마스터라는 브랜치에서와 새로만든 exp 브랜치에서 각각의 브랜치에서 같은 파일의 같은 부분을 다른 내용으로 수정하였다.

이 상태에서 git merge exp라는 명령을 하여 병합해보면 어떤 일이 생길까?

 

CONFLICT가 뜨고 충돌이 일어나면서 f1.txt라는 파일로 인해서 자동 병합이 실패된다.

*자동 병합 : 자동으로 파일을 합쳐주는 것

 

이런 충돌이 일어났을 때 깃 내부에서는 어떤 일이 일어나는가.

인덱스라는 파일의 내용을 보면 숫자가 붙어있고 숫자뒤에 파일명이 있다.

보통 지금까지 숫자는 0이었는데 충돌이 일어났을때는 숫자가 붙는다.

그리고 하나씩 클릭해보면 숫자가 1인 f1.txt는 마스터와 exp브랜치가 공통으로 가지고 있었던 f1.txt의 내용이다.

2번은 현재 체크아웃 해서 merge를 하고 있는 브랜치의 f1.txt내용이고

마지막은 병합이 될 대상의 f1.txt내용이 있다.

이 세가지 정보를 통해서 3-way-merge라고 하는 병합이 이루어진다.

공통이 되는 파일과 각자의 파일들 이 3개를 근거로 해서 자동으로 병합 작업을 시도한다.

 

그리고 다른 파일 MERGE_HEAD라는 것을 클릭해보니 

merge가 될 대상의 최신 커밋의 정보가 있다.

ORIGO_HEAD는 병합은 위험한 작업이기 때문에 위험한 작업 이전으로 돌아가기 위한 파일.

 

 

 

이제 우리가 병합 작업을 해 볼 텐데 직접 파일을 수정할 수도 있지만 병합을 전문적으로 해주는 도구를 사용하여 해볼 것이다.

사용할 도구는 kdiif3라고 하는 오픈 소스를 사용할 것이다.

이것을 사용하기 전에 프로그램을 설치해야 하고 

git config --global merge.tool kdiff3

 

 

git mergetool 이라고 입력을 하면 충돌한 파일에 대해서 mergetool을 이용해서 내가 세팅한 툴이 병합하도록 깃엑세 명령을 내리면

이렇게 메세지가 뜬다.

kdiff3

이러한 페이지가 뜬다.

각각의 파일 옆에 Base, Local, Remote 가 있는데

Base는 마스터와 exp가 공통의 커밋에서 마스터는 어떤 파일을 수정헀고 exp는 또 어떤 파일을 수정한 상황이고 이 둘의 공통적인 내용이 있다. 이러한 두 브랜치의 공통적인 내용을 베이스라고 한다.

Local은 브랜치를 하는 쪽, 내가 체크아웃 곳이다.

Remote는 merge를 당하는 쪽이다.

 

깃은 기본적으로 자동으로 병합을 해주지만 자동으로 할 수 없는 것은 conflict라고 표현하고 컨플릭트된 부분은 하단에 표시되어있다.

따라서 위의 A,B,C 버튼을 눌러 수정하는 방법이 있고 직접 수정하는 방법이 있다.

수정하고 저장하고 나가면 merge가 완료된다.

 

인덱스 파일은 이제 방금 내가 merge한 마스터와 exp를 갖게된다.

728x90

'git' 카테고리의 다른 글

<12> 생활코딩 - GIT  (0) 2022.12.03
<11> 생활코딩 - GIT  (0) 2022.12.02
<9> 생활코딩 - GIT  (0) 2022.11.28
<8> 생활코딩 - GIT  (0) 2022.11.28
<7> 생활코딩 - GIT  (0) 2022.11.27

댓글