다음을 통해 공유


페치, 병합 및 끌어오기로 코드 업데이트

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

프로젝트에 여러 기여자가 있는 경우 다른 사용자가 프로젝트의 원격 리포지토리에 업로드한 작업을 다운로드하고 통합하여 로컬 Git 리포지토리를 업데이트된 상태로 유지합니다. 다음 Git 명령은 로컬 리포지토리를 업데이트합니다.

  • Git 페치는 다른 사용자가 업로드한 새 커밋을 원격 리포지토리에서 다운로드합니다. 로컬 리포지토리 캐시의 원격 추적 분기가 업데이트됩니다. 로컬 분기는 변경되지 않은 상태로 유지됩니다.
  • Git 병합은 하나 이상의 원본 분기의 커밋을 대상 분기에 통합합니다.
  • Git rebase는 원본 분기의 커밋을 대상 분기로 통합하지만, Git 병합과는 다른 전략을 사용합니다.
  • Git 끌어오기는 페치를 수행하고, 페치된 커밋을 현재 로컬 브랜치에 통합하기 위해 병합 또는 리베이스를 수행합니다.

Visual Studio는 로컬 리포지토리에 원격 리포지토리와 동기화할 때 이러한 Git 명령의 하위 집합을 사용합니다.

Git 워크플로에 대한 개요는 Azure Repos Git 자습서를 참조하세요.

이 문서에서는 다음 작업에 대한 절차를 제공합니다.

  • 가져오기 사용하여 변경 내용 다운로드
  • 병합 또는 리베이스로 분기를 업데이트하십시오.
  • 을 사용하여 변경 사항을 다운로드하고 브랜치를 업데이트하세요.

인출을 사용하여 변경 내용 다운로드

Git fetch는 로컬 리포지토리에 없는 원격 브랜치의 커밋과 참조된 파일 객체를 다운로드하고, 로컬 리포지토리 캐시에 있는 원격 추적 브랜치를 업데이트합니다. 원격 추적 분기는 로컬로 캐시된 원격 분기의 읽기 전용 복사본이며 로컬 분기가 아닙니다. Git 인출은 로컬 분기를 업데이트하지 않습니다. 예를 들어 origin 지정된 원격 리포지토리에 bugfix3 분기가 있는 경우 Git 인출은 로컬 bugfix3 분기가 아닌 origin/bugfix3이라는 원격 추적 분기를 업데이트합니다. 원격 추적 분기를 사용하면 다음 작업을 수행할 수 있습니다.

  • 원격 추적 분기를 로컬 분기와 비교하여 가져온 변경 내용을 검토합니다.
  • 원격 추적 분기를 로컬 분기에 병합합니다.
  • 원격 트래킹 분기에서 새로운 로컬 분기를 만듭니다.

Visual Studio 2022는 Git 메뉴, Git 변경 내용 및 솔루션 탐색기 상황에 맞는 메뉴를 사용하여 Git 버전 제어 환경을 제공합니다. Visual Studio 2019 버전 16.8은 팀 탐색기 Git 사용자 인터페이스도 제공합니다. 자세한 내용은 Visual Studio 2019 - 팀 탐색기 탭을 참조하세요.

  1. Git 변경 내용 창에서 가져오기를 선택합니다. 그런 다음 나가는/들어오는 선택하여 Git 리포지토리 창을 엽니다.

    Visual Studio 2019의 Git 변경 내용 창에 있는 가져오기 단추 및 들어오는 링크의 스크린샷

    Git 메뉴에서 가져오기 선택할 수도 있습니다.

    Visual Studio 2019의 Git 메뉴에 있는 페치 옵션 스크린샷

  2. Git 리포지토리 창에서 페치된 커밋은 들어오는 섹션에 나타납니다. 페치된 커밋을 선택하여 해당 커밋에서 변경된 파일 목록을 확인합니다. 변경된 콘텐츠를 diff 보기로 보려면 변경된 파일을 선택합니다.

    Visual Studio 2019의 Git 리포지토리 메뉴 스크린샷

팁 (조언)

Fetch 더 이상 원격 분기가 없는 로컬 리포지토리 캐시에서 원격 추적 분기를 삭제하지 않습니다. Fetch동안 부실 원격 추적 분기를 정리하도록 Visual Studio를 구성하려면 다음을 수행합니다.

  • 도구>옵션>소스 제어>Git 전역 설정선택합니다.
  • 원격 브랜치를 인출 동안 정리 옵션을 True로 설정합니다.

Git 인출 후 로컬 분기를 해당 원격 추적 분기와 비교하여 원격 분기에서 변경된 내용을 확인할 수 있습니다. 가져온 변경 사항으로 현재 로컬 분기를 업데이트하려는 경우 Git 병합 또는 리베이스할 수 있습니다. 또는 Git fetch와 Git merge나 rebase를 결합하는 Git pull을 실행할 수 있습니다. Git 병합 및 Git 재배치는 소스 분기의 커밋을 적용하여 대상 분기를 업데이트합니다. 그러나 Git 병합 및 Git 리베이스는 서로 다른 전략을 사용합니다. 자세한 내용은 병합 또는 다시베이스 분기 업데이트 및 다시 기반으로 하는 시기 및 병합참조하세요.

병합 또는 리베이스를 사용하여 브랜치를 업데이트

Git 병합 및 Git 재베이스는 원본 분기의 커밋을 현재 로컬 분기(대상 분기)에 통합합니다. Git 병합패스트-포워드 또는 노-패스트-포워드 병합을 수행합니다. 빠른 전달 없음 병합은 3방향 병합 또는 true 병합이라고도 합니다. Git rebase은 병합의 또 다른 유형입니다. 이러한 병합 형식은 다음 다이어그램에 나와 있습니다.

병합 및 다시베이스를 사용할 때 커밋 전후를 보여 주는 다이어그램입니다.

Git 병합 와 Git 재배치Git 워크플로에서 광범위하게 사용됩니다. 로컬 기능 또는 버그픽스 분기에서 작업하는 경우 다음을 수행하는 것이 일반적입니다.

  1. 원격 커밋을 가져오고 병합하기 위해 정기적으로 원격 main 분기를 원격 분기와 최신 상태로 유지합니다.
  2. 리베이스 또는 병합을 사용하여 로컬 main 분기 업데이트를 로컬 기능 분기에 통합합니다.
  3. 해당 원격 분기에 푸시하여 로컬 기능 분기에 작업을 백업합니다.
  4. 기능을 완료하면, 원격 기능 브랜치를 원격 main 브랜치에 병합하기 위한 풀 리퀘스트를 생성합니다.

이 방법을 사용하면 다음을 수행할 수 있습니다.

  • 작업에 영향을 줄 수 있는 다른 사용자의 최근 작업에 대해 계속 알고 있어야 합니다.
  • 작업과 다른 사용자 간의 충돌을 즉시 해결합니다.
  • up-to-date 프로젝트 콘텐츠 위에 새 기능을 적용합니다.
  • 끌어오기 요청에 대한 작업 검토를 받으세요.

병합

Git 병합의 경우 대상 분기의 끝이 원본 분기 내에 있는 경우 기본 병합 형식은 빠른 전진 병합이 됩니다. 그렇지 않으면 기본 병합 형식은 빠르게 전달되지 않는 병합이 됩니다.

대상 분기의 팁이 원본 분기에서 분기된 경우 Git에서 빠른 전달 병합을 적용하지 않으므로 빠른 전달 Git 병합은 병합 충돌 가질 수 없습니다. 기본적으로 Git은 가능할 때마다 빠른 전달 병합을 사용합니다. 예를 들어 Git은 원격 대응 분기에서 끌어와서만 업데이트하는 로컬 분기에 빠른 전달 병합을 적용합니다.

no-fast-forward Git 병합은 원본 분기 변경 내용을 대상 분기 변경 내용과 통합하는 '병합 커밋'이라는 새 커밋을 생성합니다. 적용 가능한 변경 내용은 두 분기 모두에 공통적인 마지막 커밋 후에 적용된 변경 내용입니다. 위의 다이어그램에서 커밋 C는 두 분기에서 마지막으로 공통된 커밋입니다. 원본 분기 변경 내용이 대상 분기 변경과 충돌하는 경우 Git에서 병합 충돌을 해결하라는 메시지를 표시합니다. 병합 커밋(L)에는 통합된 원본 분기 및 대상 분기 변경 내용이 포함됩니다. 소스 및 대상 브랜치 팁(K 및 E)은 병합 커밋의 부모입니다. 귀하의 브랜치 의 커밋 히스토리에서, 병합 커밋은 병합 작업에 유용한 표식이며 어떤 브랜치가 병합되었는지를 명확하게 보여 줍니다.

Git 병합은 대상 분기만 수정합니다. 원본 분기는 변경되지 않은 상태로 유지됩니다. 하나 이상의 병합 충돌이 발생하면 병합을 완료하려면 해결해야 합니다. 또는 병합 작업을 취소하고 대상 분기를 이전 상태로 반환할 수 있습니다.

병합 옵션 및 전략에 대한 자세한 내용은 Git 참조 수동Git 병합 전략참조하세요.

팁 (조언)

원본 분기가 원격 추적 분기인 경우 병합 전에 Git 페치 실행하여 분기가 up-to-date인지 확인합니다.

  1. 메뉴 모음에서 Git > 분기 관리 선택하여 Git 리포지토리 창을 엽니다.

    Visual Studio 2019의 Git 메뉴에 있는 분기 관리 옵션 스크린샷

  2. Git 리포지토리 창에서 대상 분기를 마우스 오른쪽 단추로 클릭하고 체크 아웃선택합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 체크 아웃 옵션의 스크린샷

  3. 원본 분기를 마우스 오른쪽 단추로 클릭하고 <원본 분기><대상 분기>병합을 선택합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 병합 옵션 스크린샷

  4. 병합에 성공한 후 Visual Studio에서 확인 메시지를 표시합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 병합 확인 메시지 스크린샷

    병합 충돌로 인해 병합이 중단되면 Visual Studio에서 사용자에게 알립니다. 충돌 해결하거나 병합을 취소하고 병합 전 상태로 돌아갈 수 있습니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 병합 충돌 메시지의 스크린샷

리베이스

Git 다시 대상 분기의 커밋 기록을 다시 지정하여 모든 원본 분기 커밋을 포함하고 마지막 공통 커밋 이후 모든 대상 분기 커밋을 포함합니다. 이를 보는 또 다른 방법은 Git 리베이스가 원본 분기 기록 위에 있는 대상 분기의 변경 내용을 재생하는 것입니다. 원본 분기 변경 내용이 대상 분기 변경과 충돌하는 경우 Git에서 병합 충돌을 해결하라는 메시지를 표시합니다. Git rebase는 병합 커밋을 만들지 않습니다. 특히 Git 리베이스는 기존 대상 브랜치의 커밋 시퀀스를 변경합니다. 다른 병합 전략은 해당 사항이 없습니다. 위의 다이어그램커밋 K'에는 K와 동일한 변경 내용이 포함되어 있지만 C 대신 다시 커밋 E로 연결되므로 새 커밋 ID가 있습니다.

Git은 대상 분기만 다시베이스합니다. 원본 분기는 변경되지 않은 상태로 유지됩니다. 하나 이상의 병합 충돌이 발생하는 경우, 리베이스를 완료하려면 이를 해결해야 합니다. 또는 재베이스 작업을 취소하고 대상 분기를 이전 상태로 반환할 수 있습니다.

기능 또는 버그픽스 분기에서 작업하는 유일한 사용자인 경우 Git rebase를 사용하여 새 main 분기 커밋을 통합하는 것이 좋습니다. 그 외의 경우 Git merge를 사용합니다. Git 리베이스 및 사용 시기에 대한 자세한 내용은 리베이스로 변경 내용 적용리베이스 대 병합을 참조하세요.

팁 (조언)

원본 분기가 원격 추적 분기인 경우, 리베이스 전에 Git fetch를 실행하여 그 분기가 up-to-day인지 확인하십시오.

  1. Git > 분기 관리 선택하여 Git 리포지토리 창을 엽니다.

    Visual Studio 2019의 Git 메뉴에 있는 분기 관리 옵션 스크린샷

  2. Git 리포지토리 창에서 대상 분기를 마우스 오른쪽 버튼으로 클릭하고 체크아웃을 선택합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 분기 상황에 맞는 메뉴의 체크 아웃 옵션 스크린샷

  3. 원본 분기를 마우스 오른쪽 단추로 클릭하고 <원본 분기><대상 분기> 다시선택합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 브랜치 컨텍스트 메뉴의 리베이스 옵션 스크린샷

  4. Visual Studio는 성공적으로 다시 기반이 된 후 확인 메시지를 표시합니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 다시베이스 확인 메시지의 스크린샷

    병합 충돌로 인해 다시베이스가 중단되면 Visual Studio에서 사용자에게 알립니다. 충돌 해결하거나, 다시베이스를 취소하고, 다시베이스 전 상태로 돌아갈 수 있습니다.

    Visual Studio 2019의 Git 리포지토리 창에 있는 재베이스 충돌 메시지 스크린샷

끌어오기로 변경 내용 다운로드 및 분기 업데이트

기본적으로 Git 풀은 Git 인출과 Git 병합을 결합하여 현재 로컬 분기를 원격의 대응 분기로부터 업데이트합니다. 필요에 따라 Git 끌어오기는 Git 병합 대신 Git 다시베이스를 수행할 수 있습니다.

Git 인출과 달리 Git pull은 원격 리포지토리에서 새 커밋을 다운로드한 직후 현재 로컬 분기를 업데이트합니다. Git 가져오기 직후 현재 로컬 분기를 업데이트하려는 경우 Git 끌어오기를 사용합니다.

팁 (조언)

끌어오기 때 병합 대신 다시 기반하도록 Visual Studio를 구성하려면 다음을 수행합니다.

  1. Git 메뉴에서 도구>옵션>소스 제어>Git 전역 설정이동합니다.
  2. 옵션을 끌어올 때 로컬 분기를 다시베이스로 설정하고 True를 사용합니다.
  1. Git 변경 사항 창에서 끌어오기를 선택합니다.

    Visual Studio 2019의 Git 변경 내용 창에 있는 끌어오기 단추 스크린샷

    Git 메뉴에서 가져오기을 선택할 수도 있습니다.

    Visual Studio 2019의 Git 메뉴에 있는 끌어오기 옵션 스크린샷

  2. 끌어오기 작업이 완료되면 확인 메시지가 표시됩니다.

    Visual Studio 2019의 Git 변경 내용 창에 있는 끌어오기 확인 메시지 스크린샷

    끌어오기 작업의 병합 부분에서 충돌이 발생하면 Visual Studio에서 사용자에게 알립니다. 충돌을 해결하거나, 병합을 취소하고병합 전 상태로 돌아갈 수 있습니다.

    Visual Studio 2019의 Git 변경 내용 창에 있는 끌어오기 충돌 메시지의 스크린샷

비고

Visual Studio에서 동기화끌어오기를 수행한 다음 푸시를 수행하여 로컬 및 원격 분기를 동기화합니다. 동기화에 대한 자세한 정보는 Visual Studio에서 버전 제어를 위해 git의 fetch, pull, push, 및 동기화를 사용하는 방법을 참조하세요.

다음 단계