Git

Git - 병합(Merging)

Namiz_IT 2024. 7. 24. 15:32

 

 

Merging 개요

 브랜치는 Git의 강력한 기능이며, 프로젝트의 여러 부분을 독립적으로 작업할 수 있도록 해준다. 하지만 완료되면 만든 변경 사항을 main 브랜치와 결합하는 방법은 무엇일까?

 Git에서 병합은 한 브랜치의 변경 사항을 다른 브랜치로 통합하는 방법 중 하나이다. 병합에는 병합하는 브랜치(소스 브랜치)와 병합되는 브랜치(타겟 브랜치)가 있다.

  • 소스 브랜치: 타겟 브랜치에 통합될 변경 사항이 포함된 브랜치이다.
  • 타겟 브랜치: 변경 사항을 받는 브랜치이며, 이 작업에서 유일하게 변경되는 브랜치이다.

병합하려는 브랜치로 전환

git switch (또는 git checkout) 명령어를 사용하여 브랜치로 전환할 때 발생하는 세 가지 작업을 다시 한 번 살펴보자.

  1. 전환하려는 브랜치를 가리키도록 HEAD 포인터를 변경한다.
  2. 전환하려는 커밋에 속한 모든 파일과 디렉토리로 스테이징 영역을 채운다.
  3. 스테이징 영역의 내용을 작업 디렉토리에 복사한다.

이 세 단계에서 알 수 있듯이 브랜치가 서로 다른 커밋을 가리키는 경우 브랜치를 변경하면 작업 디렉토리의 내용도 변경된다.


Git은 커밋하지 않은 변경 사항 손실 방지

 브랜치를 변경하면 작업 디렉토리의 내용이 변경된다고 했다. 하지만 아직 커밋하지 않은 파일(즉, 편집한 파일)이 작업 디렉토리에 있다면 어떻게 될까? 브랜치를 변경하면 이러한 파일에서 작업한 내용을 모두 잃어버릴까? Git은 커밋하지 않은 변경 사항 손실을 방지한다. Git이 브랜치를 변경할 때 작업 디렉토리에서 커밋하지 않은 변경 사항을 잃게 되면 브랜치 전환을 중지하고 오류 메시지를 표시한다. 하지만 이는 커밋하지 않은 변경 사항이 있는 파일과 전환하려는 브랜치의 내용이 충돌하는 경우에만 발생한다.


커밋 체크아웃 하기

 git checkout 명령어는 브랜치 전환뿐만 아니라 다른 작업에도 사용될 수 있다. git checkout 명령어를 사용하여 커밋을 체크아웃하는 것도 가능하다.

git checkout  // 커밋 체크아웃

 

이 명령어를 사용하면 아래 세 가지 작업을 수행한다.

  1. 전환하려는 커밋을 가리키도록 HEAD 포인터를 변경한다.
  2. 전환하려는 커밋에 속한 모든 파일과 디렉토리를 스테이징 영역에 채운다.
  3. 스테이징 영역의 내용을 작업 디렉토리에 복사한다.

 이 단계들은 이전에 언급된 단계들과 주요 차이점이 있습니다. 1단계에서 HEAD 포인터는 브랜치를 가리키는 대신 커밋을 직접 가리키게 된다. 이는 분리된 HEAD 상태(detached HEAD state)가 된다는 것을 의미한다. 이를 통해 전체 리포지토리에서 모든 커밋 (즉, 프로젝트의 모든 버전)을 확인할 수 있다.

 위 단계들에서 알 수 있듯이 커밋 체크아웃은 브랜치 전환과 같은 방식으로 작업 디렉토리의 내용을 변경한다.

 

주의:

 분리된 HEAD 상태 (즉, 브랜치에 있지 않은 상태)에서는 리포지토리에 대한 변경을 수행하지 않는 것이 좋다. 일반적으로 커밋은 브랜치에서 수행하는 것이 좋다. 브랜치는 커밋 해시보다 기억하기 쉽고 언급하기 쉬우며, Git은 브랜치와 함께 사용하도록 설계되었기 때문다. 따라서 커밋을 체크아웃한 경우 일반적으로 해당 커밋을 가리키는 새 브랜치를 만들어 분리된 HEAD 상태가 아니게 만드는 것이 좋다.


한 번에 브랜치 만들기 및 전환

 git branch 명령어를 사용하여 새 브랜치를 만들고, git switch (또는 git checkout) 명령어를 사용하여 해당 브랜치로 전환하는 방법을 배웠다.

 이는 실제로 git switch 또는 git checkout 명령어를 사용하여 한 번에 브랜치를 만들고 전환하는 것이 가능하기 때문입니다.

  • git switch 명령어를 사용하는 경우 반드시 -c 옵션 ( "create"의 약자)을 사용해야 하며,
  • git checkout 명령어를 사용하는 경우 반드시 -b 옵션을 사용해야 한다.

문서 참조

https://www.oreilly.com/library/view/learning-git/9781098133900/

반응형