라인이 삭제/제거되었을 때 커밋을 찾는 방법은 무엇입니까?
Git 저장소의 파일에 삭제된 줄이 있습니다.누락된 텍스트 중 일부와 파일을 알고 있었기 때문에git log -S'missingtext' /path/to/file
.
하지만 돌아온 것은 누락된 텍스트가 포함된 줄을 추가한 커밋뿐입니다.HEAD에 텍스트가 없었고, 이 텍스트를 추가한 커밋이 브랜치에 있었기 때문에 브랜치 기록에 있는 커밋 중 하나가 이 텍스트를 제거했을 것이라는 것을 알고 있었지만 표시되지 않았습니다.
일부 수동 검색 후 병합을 위한 충돌을 해결하는 동안 실수로 라인이 제거된 것으로 나타났습니다.그래서 궁금한게 있어요.
- 이것이 곡괭이가 라인을 삭제한 커밋을 찾지 못한 이유입니까?
- 제가 어떻게 "누락된 텍스트"가 삭제된 곳을 찾을 수 있었을까요? 수동으로 역사를 파헤치지 않고 말입니다.
#1에 대한 통찰력은 매우 좋을 것입니다(저는 생각했습니다).git log -S
제 대답을 듣고 싶습니다.) 하지만 제 진짜 질문은 2번입니다. 왜냐하면 저는 앞으로 이것을 피할 수 있기 때문입니다.
git log -c -S'missingtext' /path/to/file
git log
기본적으로 병합 커밋에 대한 차이는 표시되지 않습니다.사용해 보십시오.-c
또는--cc
깃발
추가 토론/설명:
https://git-scm.com/docs/git-log
nabble.com
git-log 문서에서:
-c 이 옵션을 사용하면 병합 커밋에 대한 diff 출력은 부모와 결과 사이의 쌍별 차이를 한 번에 하나씩 표시하는 대신 각 부모의 차이를 동시에 표시합니다.또한 모든 부모로부터 수정된 파일만 나열됩니다.
--cc 이 플래그는 -c 옵션을 의미하며 부모의 내용이 두 개의 변형만 있고 병합 결과가 수정 없이 그 중 하나를 선택하는 흥미 없는 헝크를 생략하여 패치 출력을 추가로 압축합니다.
슈퍼 유저: Git: 어떤 커밋이 행을 삭제했는지 어떻게 찾을 수 있습니까?
git blame --reverse START.. file.ext
각 라인에 대해 라인이 있었던 마지막 커밋(예: hash 0123456789)이 표시됩니다.다음에 수행할 커밋은 해당 커밋을 제거한 커밋입니다. 사용git log
해시 0123456789를 검색한 다음 후속 커밋을 검색합니다.
빠르고 더러운 방법 #2 - 루프에 a를 사용합니다.
for commit in $(git log --pretty='%H'); do
git diff -U0 --ignore-space-change "$commit^" "$commit" | grep '^-.*missingtext' > /dev/null && echo "$commit"
done
여기에는 diff에 대한 기본 커밋을 명시적으로 지정하므로 모든 병합 변경사항이 포함됩니다.제가 이걸 생각해낸 이유는git log -c -S...
저에게 많은 거짓 긍정을 주고 있었습니다.▁the에서 했을 때git log
명령입니다. 제가 찾던 커밋을 건너뛰었습니다.
이 작업은 잠시 동안 실행될 수 있으므로 다음과 같이 지정할 수 있습니다.-n
에서.git log
명령 또는 배치&& break
하나의 결과만 필요한 경우 루프의 끝에 있습니다.
언급URL : https://stackoverflow.com/questions/12591247/how-to-find-commit-when-line-was-deleted-removed
'source' 카테고리의 다른 글
Socket.io + Node.js 교차 오리진 요청 차단됨 (0) | 2023.09.09 |
---|---|
CSS/HTML: 텍스트를 이탤릭체로 만드는 올바른 방법은 무엇입니까? (0) | 2023.09.09 |
마우스 이벤트 없이 jQuery에서 마우스 위치를 얻는 방법은 무엇입니까? (0) | 2023.09.04 |
asp.net 에서 DateTime의 Javascript 직렬화는 Javascript 날짜 객체를 제공하지 않습니까? (0) | 2023.09.04 |
jQuery ajax 호출 측면에서 php 에코와 반환 간의 차이 (0) | 2023.09.04 |