Git 기록 간소화 이해
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Git 역사 단순화는 혼란스러운 짐승이 될 수 있습니다. 99%의 시간이 존재한다는 것을 알지 못하지만, 가끔은 Git의 어두운 구석에서 뛰어내리고 물기도 합니다. 이 문서에서는 기록 단순화의 정의와 파일 기록을 볼 때 어떻게 혼동을 일으킬 수 있는지 살펴보겠습니다.
일반적인 시나리오부터 시작해 보겠습니다.
- 변경 사항을 파일로 푸시한 다음 변경 사항을 기본 병합합니다.
- 동료 중 일부는 분기를 병합하여 기본.
- 잠시 후에 돌아와서 변경 내용이 누락된 것을 알 수 있습니다.
- 범인을 찾고, 당신은 파일 기록을보고 통지 이동 ... 변경 내용이 나열되지 않습니다!?
Git 커밋 기록은 트리입니다. 시간순 기록이 실제 파일 트리 기록과 동일하지 않은 경우도 있습니다. 이 상황은 병합 커밋이 파일을 원래 상태로 되돌리기 때 가장 자주 발생합니다. 이 경우 기술적으로 파일이 변경되지 않았기 때문에 기본 기록 보기 에 모든 변경 내용이 실제로 표시되지는 않습니다. 이 시나리오에서 Git은 기록을 간소화할 수 있으며 가장 가능성이 큰 "변경 내용"이 로그에서 제거된다는 것을 인식합니다.
당신이 전에 그것을 실행하지 않는 한, 당신은 좌절 될 수 있습니다, 도대체 내 변화가 어디로 갔는지 궁금해 ?
기록 단순화: 기본적으로 켜기
기본적으로 파일 git log file.txt
에서 로그 명령을 실행하면 기록이 자동으로 간소화되고 출력에서 일부 커밋이 숨어질 수 있습니다. 자세한 내용은 git 로그 맨 페이지를 참조 하세요.
혼동을 더하는 것은 단순히 실행하는 git log
경우 기록 단순화가 발생하지 않는다는 것입니다. 모든 변경 내용을 보고 있으므로 단순화할 것이 없기 때문입니다.
기록 단순화를 해제하려면 명령줄 스위치 --full-history
를 사용해야 합니다.
기록 단순화의 예
단순화가 어떻게 작동하는지 더 잘 이해하기 위해, 우리는 역사 단순화의 우리 자신의 예를 만듭니다. 먼저 만들 기록 다이어그램을 살펴보겠습니다.
여기서 볼 수 있듯이 다음을 수행합니다.
- 파일을 만듭니다.
- 분기(동물)의 해당 파일에 줄을 추가합니다.
- 다른 분기(과일)의 해당 파일에 다른 줄을 추가합니다.
- 분기 동물을 다시 기본 병합합니다.
- 분기 과일을 다시 기본 병합하고 과일 분기에서 파일의 전체 복사본을 선택합니다.
- 파일의 기록을 확인합니다.
Git은 우리에게 역사를 단순화할 것입니다. 여기서는 5단계가 핵심입니다. 우리는 동물 분기의 모든 변화를 무시했습니다. Git은 파일이 기본적으로 1단계와 5단계 사이에 변경되지 않았기 때문에 두 개의 기록 항목만 표시 합니다.
먼저 파일을 만들고 리포지토리에 추가합니다.
> cd sample
> git init
> echo "some content" > test.txt
> git add test.txt
> git commit -m "Initial commit"
이제 동물 분기의 파일에 "당나귀" 텍스트를 추가하기로 결정했습니다.
> git checkout -b animals
> echo "donkeys" >> test.txt
> git commit -am "We have added an animal"
실험하는 동안 파일에서 과일을 대신 사용하려고 하므로 다른 분기를 만들고 파일 끝에 "바나나"라는 텍스트를 추가합니다.
> git checkout main -b fruit
> echo "bananas" >> test.txt
> git commit -am "We have added a fruit"
우리의 변화에 만족하는 느낌, 우리는 기본 다시 우리의 동물 분기를 병합하기로 결정 :
> git checkout main
> git merge animals
이제 파일에 대한 로그를 test.txt
살펴보겠습니다.
> git log test.txt
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
지금까지 좋은, 오른쪽? 로그 출력에서 일반적인 항목은 없습니다. 이제 마음을 바꾸고 과일 가지를 병합하기로 결정했다고 가정해 보겠습니다.
>git merge fruit
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
어- 오, 병합 충돌. 몇 가지 고려 후 과일 분기의 전체 test.txt
파일을 사용하기로 결정했습니다. 일반적으로 일종의 텍스트 편집기 또는 병합 도구를 사용하지만, 두 줄에 불과하므로 전체 파일만 다시 만듭니다.
> echo "some content" > test.txt
> echo "bananas" >> test.txt
> git commit -am "Fixed merge conflict"
이제 파일의 기록을 test.txt
살펴보겠습니다.
> git log test.txt
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
물론 로그의 첫 번째 실험에서 변경된 내용이 표시되지 않으며 병합도 표시되지 않습니다. 그들은 여전히 거기에 있습니까? Git에서 변경 내용을 완전히 제거했나요?
> git log --full-history test.txt
볼 수 있듯이 플래그 없이 full-history
로그를 간소화했지만 Git은 모든 변경 내용을 유지했습니다.
> commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
Merge: 6b33d99 fdd4dfd
Date: Mon Feb 15 10:59:34 2016 -0500
Fixed merge conflict
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Git 기록 단순화 요약
역사 단순화에 대한 것은 대부분의 경우 당신이 그것을 눈치 채지 못할 것이라는 것입니다. 그러나 병합 충돌 잘못되고 무슨 일이 일어났는지 알고 싶을 때 git 로그 기록을 보고 변경 내용이 어디로 갔는지 궁금할 수 있습니다.
이제 당황하는 대신 다음을 알 수 있습니다.
- 파일에 대한 기록 간소화는 기본적으로 설정되어 있습니다.
- 플래그는
--full-history
보다 포괄적인 파일 기록을 제공합니다.
업데이트: 이 문서를 작성한 이후 Azure DevOps Services는 웹에서 다양한 멋진 기록 보기 옵션을 도입했습니다. 즉, 명령줄을 통해 로깅하지 않으려면 탐색기에서 기록을 보려는 파일을 끌어올 수 있으며 단순 또는 단순하지 않은 기록 보기를 지정할 수 있는 아래 기록 필터가 표시됩니다.
(c) 2016 Microsoft Corporation. All rights reserved. 이 문서는 "있는 그대로" 제공됩니다. URL 및 기타 인터넷 웹 사이트 참조를 포함하여 이 문서에 표현된 정보 및 보기는 예고 없이 변경될 수 있습니다. 이 문서의 사용으로 발생하는 위험은 귀하의 책임입니다.
이 문서는 어떠한 Microsoft 제품에 포함된 어떠한 지적 자산에 대한 법적 권한도 귀하에게 제공하지 않습니다. 이 문서는 내부 참조용으로 복사 및 사용할 수 있습니다.