.gitignore
git이 관리하지 않을 파일들은 gitignore에 작성합니다.
$ cd git-
git-practice/ git-test/
$ cd git-^c
$ mkdir git-branch
$ code git-branch/
git 연습 디렉토리를 설정합니다.
$ touch README.md .gitignore
$ git init
$ git add .
$ git commit -m 'first commit'^c
보통 처음에 init하기 전에 ignore할 사항을 먼저 체크합니다.
commit할 때 -m을 붙이지 않으면 Vim이 켜집니다.
branch
branch란 가지란 뜻을 가지고 있습니다. 브랜치는 일종의 포스트잇 혹은 포인터, 분기점 같은 개념입니다.
커밋을 3번 했다면 master 브랜치는 이런식으로 현상이 저장되어 있을 것입니다. git branch 브랜치이름 으로 생성할 수 있습니다. git branch a 라고 한다면, head가 가리키는 기준으로 새 branch를 생성합니다. 지금과 같은 경우 head가 똑같이 3번 커밋을 가리키기 때문에 master 브랜치와 a 브랜치는 같습니다.
git commit -m '4'
a 브랜치에서 새 커밋을 만든다면 위의 그림과 같은 상태가 됩니다.
head
git log --oneline
git log를 찍어보면 head가 어디를 가리키고 있는지 나타납니다. head는 현재 보고있는 브랜치라고 생각할 수 있습니다. 위와 같이 master 브랜치에서 3번 커밋을 보고있다고 생각할 수 있습니다. head가 어디를 가리키는지 확인하려면 cat .git/HEAD를 실행합니다.
HEAD가 분리된 상태는 HEAD가 브랜치 이름과 관련이 없는 특정 리비전을 참조하는 상황을 말합니다. 이는 특정 커밋, 태그 또는 원격 브랜치를 체크아웃할 때 발생합니다.
checkout
checkout은 commit id을 이용하여 브랜치를 전환 할 수 있습니다. 브랜치를 전환하면 head 리비전이 새 브랜치의 끝을 가리키도록 변경됩니다.
git checkout 명령어를 사용하여 특정 커밋으로 전환하면 HEAD가 브랜치 이름과 관련이 없는 특정 리비전을 참조하게 되어 분리된 HEAD 상태가 됩니다.
reset
reset은 인덱스를 업데이트하고 head를 이동하는데 특화되어 있습니다.
Git 인덱스는 다음 커밋에 포함될 변경 사항을 준비하는 영역입니다. 이 영역은 스테이징 영역이라고도 불리며, git add 명령어를 사용하여 파일을 인덱스에 추가할 수 있습니다. 인덱스는 작업 디렉토리와 저장소 사이의 중간 단계로, 작업 디렉토리에서 변경한 파일을 커밋하기 전에 인덱스에 추가해야 합니다.
reset명령어는 지정된 커밋으로 세 개의 트리(상태관리메커니즘)를 리셋하여 저장소의 상태를 해당 커밋과 일치하게 하는 것입니다.
세 개의 트리란 working directory, stage, commits를 의미합니다.
merge
merge는 두개 이상의 커밋 시퀀스를 하나의 통합된 히스토리로 병합합니다. 일반적으로 두개의 브랜치를 결합하는데 사용됩니다.
git은 두 개의 커밋 포인터를 가져와서 그 사이에 공통 커밋을 찾습니다. 공통 기본 커밋을 찾으면 각 대기중인 병합 커밋 시퀀스의 변경 사항을 결합하는 새로운 병합 커밋을 만듭니다.
병합 커밋은 일반적인 커밋과 달리 두 개의 부모 커밋이 있습니다. 공통 기본 커밋은 자동으로 히스토리를 결합하지만, git이 두 히스토리 모두에서 변경된 데이터 조각을 만나면 자동으로 결합할 수 없습니다. 이때는 사용자의 개입이 필요합니다.
이 경우 사용자는 충돌이 발생한 파일을 직접 편집합니다. 충돌이 해결된 후 git add 명령어를 사용하여 파일을 인덱스에 추가하고 변경사항을 커밋합니다.
병합충돌
병합 충돌이 발생하면 Git은 충돌이 발생한 파일에 표시를 추가하여 어디에서 충돌이 발생했는지 알려줍니다. 이러한 표시는 «««<, =======, »»»>와 같은 형태로 나타납니다.
충돌을 해결하려면 충돌이 발생한 파일을 직접 편집하여 충돌 부분을 수정해야 합니다. 이는 일반적으로 두 변경 사항 중 하나를 선택하거나 두 변경 사항을 수동으로 결합하는 것을 의미합니다. 충돌 부분을 수정한 후에는 «««<, =======, »»»>와 같은 표시를 모두 제거해야 합니다.
댓글남기기