편집

다음을 통해 공유


Git FAQ

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

이 문서에서는 특히 Azure Repos에 맞게 조정된 Git에 대한 질문과 대답을 찾습니다. 원격 분기를 관리하거나, 현재 분기를 식별하거나, 덜 일반적인 다른 Git 작업을 처리하려는 경우 이 가이드에서는 유용한 팁과 솔루션을 제공합니다. Git 워크플로를 개선하고 일반적인 문제를 해결하려면 다음 섹션을 자세히 살펴보세요.

원격 분기를 로컬 리포지토리에 쉽게 다운로드하려면 어떻게 해야 하나요?

먼저 리포지토리가 origin 구성되어 있는지 확인합니다. 를 사용하여 git clone리포지토리를 복제한 경우 이 항목이 있어야 합니다. 로컬에 존재하지 않는 분기를 체크 아웃하면 Git에서 이름이 같은 원격 분기가 있는지 확인합니다. 있는 경우 Git은 원격 분기를 참조하는 로컬 분기를 만듭니다. 커밋을 다운로드하고 분기 기록을 로컬로 업데이트하는 데 사용합니다 git pull .

어떤 분기에서 작업하고 있는지 어떻게 확인할 수 있나요?

인수 없이 실행 git branch 하여 로컬 분기를 표시하고 체크 아웃한 분기를 강조 표시합니다. Visual Studio에서 상태 표시줄에는 로컬 Git 리포지토리에 저장된 프로젝트로 작업할 때 현재 분기도 표시됩니다.

Git 커밋은 언제 수행해야 하나요?

논리적으로 고유한 변경에 대해 별도의 커밋을 만드는 것이 가장 좋습니다. 커밋을 로그북의 항목으로 간주합니다. 변경할 때마다 주목할 만한 내용을 커밋에 기록합니다. 자주 사용되는 방법은 로컬 커밋을 자주 허용하지만 푸시하기 전에 리베이싱을 통해 스쿼시하는 것입니다. 이렇게 하면 커밋 기록을 간소화하면서 유연성을 제공합니다.

모든 분기가 전체 커밋 기록을 유지하는 경우 시간이 지남에 따라 *main*의 커밋 기록을 따르기 어렵게 만들지 않습니까?

커밋 및 기여자가 많은 대규모 프로젝트는 전체 프로젝트보다 토픽 분기의 개발을 반영하는 분기 기록을 생성 main 할 수 있습니다. Git을 사용하면 커밋을 스쿼시하고 재배정을 통해 분기에서 커밋을 압축할 수 있습니다. 커밋을 스쿼시하면 분기 기록의 자세한 정보가 줄어들어 병합된 주 분기의 커밋 기록이 간소화됩니다.

누가 파일을 특정하게 변경했는지 어떻게 알 수 있나요?

git blame 명령을 사용하여 파일을 특정하게 변경한 사용자를 확인합니다. 로컬 리포지토리에서 매개 변수를 -L 사용하여 실행 git blame 하여 관심 있는 줄을 지정할 수 있습니다. Blame 는 마지막으로 줄을 업데이트한 커밋과 커밋을 만든 사람의 이름을 보여 주는 형식이 지정된 출력을 생성합니다.

> git blame Example_repo -L 20,+40  # show the blame output for the next 40 lines starting at line 20

215d1108 (Example User 2015-11-21 09:54:23 -0800 20) line 20 of the code
215d1108 (Example User 2015-11-21 09:54:23 -0800 21) line 21 of the code
215d1108 (Example User 2015-11-21 09:54:23 -0800 22) line 22 of the code

Blame 는 커밋 기록을 검색합니다. 웹 포털에서 파일의 기록을 검토하여 변경한 사용자와 시기를 확인할 수도 있습니다. 리포지토리 및 분기에 대한 코드 탐색기를 연 다음 관심 있는 파일을 선택합니다. Azure Repos는 현재 분기에서 해당 파일에 대한 전체 커밋 기록을 표시합니다.

일부 파일을 변경했는데 지금은 다른 분기로 체크 아웃하거나 내 작업을 다시 작성할 수 없습니다.

Git에서 다른 분기로 체크 아웃하면 파일 시스템의 파일 상태에 영향을 줍니다. Git은 커밋 기록을 사용하여 분기의 상태를 나타내는 파일로 작업하고 있는지 확인합니다. 커밋되지 않은 변경 내용이 있는 동안 분기를 변경하려고 하면 체크 아웃 중에 해당 변경 내용을 덮어씁니다. Git에서 실수로 변경 내용을 손실하지 않도록 하므로 체크 아웃이 발생하지 않습니다. 이때 다음 두 가지 방법을 사용할 수 있습니다.

  • 변경 내용을 포기하고 가장 최근의 커밋으로 돌아갑니다. 최신 커밋으로 롤백하는 방법에 대한 지침은 Git의 변경 내용 취소를 참조하세요.
  • 변경 내용을 커밋합니다. 커밋을 사용하여 Git에 작업 저장을 참조 하세요.
  • 현재 작업을 숨기고 , 나중에 변경 내용을 저장하고, 작업 영역을 마지막 커밋으로 정리합니다.

끌어오기 요청은 이 메시지와 병합할 수 없습니다. '자동으로 병합할 수 없습니다. 내부 git 개체(Blob, 트리, 커밋 또는 태그) 중 하나가 너무 커서 TF401022 예외가 발생했습니다. LFS를 사용하거나, 병합 또는 큰 커밋을 여러 개의 작은 커밋으로 분할할 수 있습니다.'

이 문제는 큰 이진 파일의 병합 충돌 관련되어 있습니다. 파일의 현재 제한은 100MB입니다. 해결 방법은 대상을 로컬로 원본에 병합하고, 충돌을 해결하고, 변경 내용을 푸시하여 로컬에서 병합 충돌 해결하는 것입니다.

Git LFS(큰 파일 스토리지)는 충돌을 방지할 뿐만 아니라 클론 및 푸시 시간에 영향을 주는 전체 리포지토리 크기를 관리하기 위해 큰 이진 파일을 저장하는 데 권장됩니다.

나는 몇 가지 일을했지만 다른 무언가로 전환해야합니다. 변경 내용을 커밋하지 않고 나중에 작업을 저장하려면 어떻게 해야 하나요?

변경 내용을 커밋하지 않고 저장하려면 Git을 stash사용합니다. Stash는 현재 준비 및 스테이징되지 않은 변경 내용을 분기에 저장하고 분기를 마지막 커밋의 상태로 되돌려 줍니다. 그런 다음 다른 분기로 전환하고 작업을 수행하고 나중에 실행 stash apply 하여 변경 내용을 복원할 수 있습니다.

git stash
Saved working directory and index state WIP on feature1: be26067 updated endpoint docs
HEAD is now at be26067

[]를git stash apply 실행하면 가장 최근에 숨겨진 변경 내용이 현재 분기에 적용됩니다. 충돌이 있는 경우 충돌stash하지 않는 파일의 변경 내용을 복원하고 충돌하는 파일에 충돌 표식을 만듭니다. 이 경우 변경 내용을 수동으로 병합해야 합니다.

숨김을 완료했으면 [git stash drop]를 사용하여 삭제합니다. 이 명령은 숨겨진 변경 내용의 마지막 집합을 제거합니다.

여러 개의 스테이시를 가질 수 있지만, 이를 관리하려면 명시적으로 스테이시를 적용하고 삭제해야 하므로 더 많은 수동 조작이 필요합니다. Git Stash 설명서에서 자세히 알아보세요.

Git 명령줄 도구의 기본 편집기를 어떻게 변경할 수 있나요?

기본적으로 명령줄 Git은 커밋 메시지 요청, 다시 기반 수행 및 추가 정보를 완료해야 하는 기타 작업을 수행할 때 명령줄 편집기를 사용합니다. 기본 편집기는 다음을 사용하여 git config구성됩니다.

> git config core.editor _path_to_editor_ _options_to_editor_

Windows용 Git을 사용하면 메모장을 편집기로 쉽게 설정할 수 있습니다.

> git config core.editor notepad

이 명령은 필요에 따라 Git 정보를 편집하고 Git에서 메모장에 텍스트를 제대로 전달하도록 Windows 메모장을 구성합니다. 지정할 수도 있습니다.

> git config format.commitMessageColumns 72 

커밋 메시지 텍스트 열을 기본 72로 유지하고 줄 바꿈을 줄에 해당 문자 제한에 도달한 후 줄 바꿈을 유지합니다.

커밋에 표시되는 사용자 이름 및 전자 메일을 변경하려면 어떻게 해야 하나요?

Git은 각 커밋 내에 사용자 이름 및 이메일 주소 정보를 배치하고, Azure Repos는 커밋을 볼 때와 끌어오기 요청을 사용할 때 이 정보를 사용합니다. 명령줄에서 작업하는 경우 다음 명령을 사용하여 표시되는 이름 및 전자 메일 정보를 업데이트할 git config 수 있습니다.

> git config --global user.email "example-user@example-site.com"
> git config --global user.name "Example User"

이 옵션은 이 --global 시스템의 모든 Git 리포지토리에 대한 커밋에 포함된 이메일 및 이름을 설정합니다. 단일 리포지토리에 대한 설정을 변경하려면 Git 리포지토리가 있는 디렉터리로 변경하고 플래그 없이 --global 위의 명령을 실행해야 합니다.

Visual Studio에서 이름 및 전자 메일 설정을 변경할 수도 있습니다. Git 메뉴에서 옵션 대화 상자에서 설정을 선택하고 Git 전역 설정 또는 Git 리포지토리 설정>일반을 선택합니다.

Visual Studio 2019 버전 16.8 이상 버전은 팀 탐색기 Git 사용자 인터페이스를 유지하면서 Git 버전 제어 환경을 제공합니다. 팀 탐색기를 사용하려면 메뉴 모음에서 도구>옵션>미리 보기 기능>의 새 Git 사용자 환경을 선택 취소합니다. 두 인터페이스에서 Git 기능을 서로 교환하여 연습할 수 있습니다.

팀 탐색기에서 설정을 선택하고 Git에서 전역 설정 또는 리포지토리 설정 링크를 선택합니다.