git 로그에 이동 된 파일의 기록이 표시되지 않는 이유는 무엇이며 어떻게해야합니까? 커밋 목록에서 사라졌기 때문에

git mv, used를 사용 하여 몇 개의 파일 이름을 변경하고 git stashHEAD를 빠르게 살펴본 다음 (변경하지 않고) git stash pop전체를 다시 가져 왔습니다. 내 움직임이 커밋 목록에서 사라졌기 때문에 나는 그들을 다시 썼고 git rm커밋 메시지는 git이 이름 바꾸기가 이름 바꾸기라는 것을 발견했다고 주장했습니다. 그래서 더 이상 생각하지 않았습니다.

하지만 이제 커밋 후 이동 된 파일의 기록을 가져올 수 없습니다! 다음은 문제의 커밋에 대해 git이 말하는 내용입니다.

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

이제 이동 된 파일 중 하나의 기록을 가져 오려고하므로 이전 버전을 볼 수 있지만 매우 유용한 정보는 없습니다.

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src%

( -M, -C및 없이 시도 --find-copies-harder했지만 아무 소용이 없습니다.)

이전 이름으로 기록을 가져올 수 있으며 이전 위치에서 삭제 된 시점에서 중지됩니다.

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

그래서 나는 이번에 완전히 갇혀 있지는 않지만 항상 이런 종류의 일을 해야하는 것을 좋아하지 않을 것입니다. (나는 평생에 한 번 이상 이동할 파일이 상당히 많을 것으로 예상합니다.)

내가 뭘 잘못하고 있니? 파일의 이전 복사본과 새 복사본은 98.8 % 동일합니다 (166 개 중 2 줄 변경됨). 내 이해는 git이이 경우 파일을 추적 할 수 있어야한다는 것입니다. 왜냐하면 명시 적으로 저장하는 대신 이름 바꾸기 작업을 추론하기 때문이며 파일은 동일하다고 생각할만큼 충분히 유사합니다.

이 문제를 해결하기 위해 할 수있는 일이 있습니까?



답변

git log --follow파일을 사용해보십시오 . 여기서 배운다 git에서 파일을 이동 / 이름 변경하고 기록을 유지할 수 있습니까?


답변

음, git log -M --summary..


답변

내 문제를 정확히 해결하지 않았더라도 내 문제를 해결할 수 있었기 때문에 내 질문에 답했습니다. ( git log --follow그래도 나를 위해 작동하지 않습니다.)

첫째, --summary이름 변경 커밋에 대한 로그에는 delete파일의 이전 이름이 있는 줄이 포함됩니다 . 따라서 쉽게 알아볼 수 있다면 옛 이름을 찾을 수 있습니다 git log.

큰 커밋의 일부이므로 발견하기가 조금 더 어렵고이 상황이 내 걱정 중 하나 였다면 git blame -C이름 변경 후 첫 번째 개정판에서 파일의 새 이름과 함께 사용할 수 있습니다. 아마도 원본 파일에서 줄이 남아있을 것입니다! -따라서 git은 소스를 찾고 이전 파일 이름 (그리고 좋은 측정을위한 커밋 해시)을 표시해야합니다. 그런 다음을 사용하여 트레일을 선택할 수 있습니다 git log.

따라서 어떤 이유에서든 파일의 이력에 관심이 있다면 비교적 간단하게 수행 할 수있는 것 같습니다. 나는 git이 당신이 그것을 적절하게 사용하는 것을 선호한다는 인상을 받았지만.


답변

git log --follow ./path/to/file

나는 이것이 당신이 찾고있는 것이라고 믿습니다.


답변