다시 지정으로 변경 내용 적용

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

Visual Studio 2019 | Visual Studio 2022

Git은 각 새 커밋이전 버전에 연결하여 분기의 개발 기록을 자동으로 기본. 한 분기를 다른 분기로 병합하면 기록이 덜 간단해질 수 있습니다. 예를 들어 빠른 전달 없는 병합은 여러 선행 작업과 병합 커밋을 만들어 서로 다른 개발 라인을 결합합니다. 반대로 Git 리베이스 는 병합 커밋을 만들지 않고 다양한 개발 라인을 결합하므로 커밋 기록이 더 간단해지지만 병합에 대한 정보가 손실됩니다. 병합 형식선택은 병합 레코드를 유지할지 아니면 커밋 기록을 단순화할지에 따라 달라질 수 있습니다.

이 문서에서는 빠른 전달 없는 병합 대신 rebase를 사용하는 경우를 설명하고 다음 작업에 대한 절차를 제공합니다.

  • 로컬 분기 다시베이스
  • 다시베이스 후 로컬 분기 강제 푸시
  • 로컬 커밋을 스쿼시 대화형 다시 기반

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

로컬 분기 다시베이스

Git 리베이스 는 원본 분기의 커밋을 현재 로컬 분기(대상 분기)에 통합합니다. 원본 분기는 변경되지 기본. 비교를 위해 Git 리베이스 및 기타 병합 형식은 다음 다이어그램에 표시됩니다.

Git rebase를 사용할 때 커밋 전후를 보여 주는 다이어그램

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

다시베이스하는 동안 원본 분기 변경 내용이 대상 분기 변경과 충돌하는 경우 Git에서 병합 충돌 해결하라는 메시지를 표시합니다. 병합 중에 병합 충돌 확인하는 것과 동일한 방식으로 다시베이스 중에 병합 충돌 확인할 수 있습니다.

rebase vs. no-빠른 전달 merge

Git 재지정을 사용하면 빠른 전달 없는 병합보다 간단하지만 정확한 커밋 기록이 생성되며, 그렇지 않으면 3방향 또는 true 병합이라고 합니다. 커밋 기록에서 병합의 레코드를 원하는 경우 빠른 전달 없는 병합을 사용합니다.

기능 또는 버그픽스 분기에서 작업하는 유일한 사용자인 경우 rebase를 사용하여 최근 main 분기 작업을 정기적으로 통합하는 것이 좋습니다. 이 전략은 다른 사용자의 최근 작업을 인식하고 발생하는 모든 병합 충돌 신속하게 해결하는 데 도움이 됩니다. 재지정을 통해 최신 main 분기 작업 위에 새 기능을 구현하여 선형 커밋 기록을 기본 수 있습니다.

Git 리베이스 및 사용 시기에 대한 자세한 내용은 Rebase 및 병합을 참조하세요.

다시 기반 및 강제 푸시 지침

이전에 푸시한 로컬 분기를 다시베이스한 다음 기본 Git 푸시 명령을 다시 실행하면 푸시가 실패합니다. 기본 Git 푸시 명령은 빠른 전달 병합을 적용하여 로컬 분기를 원격 분기에 통합합니다. 다시베이스가 로컬 대상 분기의 기존 커밋 시퀀스를 변경하므로 해당 명령이 다시베이스 후에 실패하므로 원격 대응 항목의 기록과 더 이상 일치하지 않습니다. 이 시나리오에서는 원격 분기를 덮어써서 강제 푸시 성공합니다.

Git 재지정 및 강제 푸시 강력한 도구이지만 다음 지침을 사용할지 여부를 결정할 때는 다음 지침을 염두에 두어야 합니다.

  • 다른 사용자가 공유 분기를 사용하지 않는 한 푸시되고 다른 사용자와 공유된 로컬 분기를 다시 지정하지 마세요. 다시 기반이 되면 로컬 분기가 원격 분기의 기록과 더 이상 일치하지 않습니다.
  • 로컬 버전의 원격 분기가 업데이트된 원격 분기 기록과 더 이상 일치하지 않으므로 다른 사용자가 사용 중인 원격 분기에 강제 푸시 마세요.
  • 팀은 재지정 및 강제 푸시 사용 시나리오에 동의해야 합니다.

공동 작업 검토 프로세스의 경우 끌어오기 요청을 사용하여 새 작업을 원격 리포지토리의 기본 분기 병합합니다.

다시베이스하는 방법

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

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

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

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

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

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

    Visual Studio의 Git 리포지토리 창에 있는 분기 상황에 맞는 메뉴의 다시베이스 옵션 스크린샷

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

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

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

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

다시베이스 후 로컬 분기 강제 푸시

이전에 푸시한 로컬 분기를 다시베이스하는 경우 후속 기본 Git 푸시가 실패합니다. 대신 로컬 분기를 강제 푸시 해당 커밋 기록과 일치하도록 원격 대응을 덮어쓸 수 있습니다.

Warning

다른 사용자가 작업 중인 분기를 강제 푸시 않습니다. 자세한 내용은 다시베이스 및 강제 푸시 지침을 참조하세요.

Visual Studio에서 강제 푸시 먼저 강제 푸시 옵션을 사용하도록 설정해야 합니다.

  1. 도구>옵션>소스 제어>Git 전역 설정 이동합니다.

  2. 밀어넣기 --force-with-lease 사용 옵션을 선택합니다.

Git 푸시 --force-with-lease 플래그는 강제 푸시 로컬 분기 내에 통합되지 않은 커밋이 있는 원격 분기를 덮어쓰지 않으므로 플래그보다 --force 안전합니다.

  1. Git 변경 내용 창에서 푸시 단추를 선택하여 커밋을 푸시합니다.

    Visual Studio의 Git 변경 내용 창에 있는 위쪽 화살표 누름 단추의 스크린샷

    또는 Git 메뉴에서 푸시선택할 수 있습니다.

    Visual Studio의 Git 메뉴에서 푸시 옵션의 스크린샷

  2. 기본 Git 푸시 작업이 실패하면 Visual Studio에서 Git-Push 실패 대화 상자를 시작합니다. 강제 푸시를 선택합니다.

    Visual Studio에서 Git-push 실패 대화 상자의 스크린샷

  3. Visual Studio는 푸시에 성공한 후 확인 메시지를 표시합니다.

    Visual Studio의 푸시 확인 메시지 스크린샷

로컬 커밋을 스쿼시 대화형 다시 기반

일반적으로 로컬 기능 분기 새 기능을 작업할 때 여러 커밋을 만듭니다. 새 기능을 게시할 준비가 되면 해당 커밋을 단일 커밋으로 통합하여 커밋 기록을 간소화할 수 있습니다. 대화형 재베이스를 사용하여 여러 커밋을 단일 커밋으로 스쿼시 수 있습니다.

Visual Studio 2022는 대화형 재지정을 지원하지 않습니다. 대신 Git 명령줄을 사용합니다.

참고 항목

Azure DevOps 사용자는 병합을 스쿼시 끌어오기 요청 중에 토픽 분기의 커밋 기록을 압축할 수 있습니다.

다음 단계