git 로그에 이동 된 파일의 기록이 표시되지 않는 이유는 무엇이며 어떻게해야합니까?


91

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이이 경우 파일을 추적 할 수 있어야한다는 것입니다. 왜냐하면 명시 적으로 저장하는 대신 이름 바꾸기 작업을 추론하기 때문이며 파일은 동일하다고 생각할만큼 충분히 유사합니다.

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


추측 : ~ / projects / system / runtime / src 대신 ~ / projects / 내부에서 명령을 실행하면 작동합니까?
Douglas

아니, 같은 결과를 얻습니다. (일반적으로 자식 ... 어쨌든 어떤 폴더에시키는에 대해 꽤 좋은 것 같다)

그것은 나에게 아이디어를 주었다. 그리고 나는 내 발견으로 질문을 업데이트했다. 댓글 주셔서 감사합니다!

mswindows에서 "tortoiseGit 1.5.8.0"과 "1.7.3.1.msysgit.0"을 함께 사용하고 있습니다. 탐색기에서 파일의 이름을 바꾸고 커밋하면 GUI "status = Rename"에 표시됩니다. 나는 git에 대해 "어떻게 하는가"라고 대답하기 위해 명령 줄에서 이것을 수행하는 방법에 대해 충분히 알지 못하지만 tortoiseGit은 당신이 예상 한대로 작동하는 것을 나에게 해주었다.
k3b

답변:



28

음, git log -M --summary..


git log -M --summary주어진 파일의 히스토리, 즉 파일 인수를 사용하는 경우 이름 바꾸기 정보를 제공하지 않습니다.
vinc17

17

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

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

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

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


6
사실은 오히려 삭제 / 추가 기능보다는 이름 바꾸기 쇼 당신은 -M 옵션을 필요가 있다고 생각
아드리안 콘월어

1
방금 동일한 문제가 발생 git log --follow .하여 작업 디렉토리가 새 위치 인 작업 디렉토리가 작동하지 않는 차이를 만드는 반면 git log --follow path/to/new/dir, 이전 및 새 위치의 공통 상위 디렉토리에서 실행되는 동안 작동합니다
akraf

1
--follow매개 변수는 작업을 수행,하지만 당신은 할 필요가 :git log --follow -- ./path/to/file
DrumM

git -log filename.cs파일 이동 커밋에서 중지 되는 문제가 있습니다 (현재 디렉토리가 파일 폴더로 설정 됨). 그러나 VS 기록 창에는 전체 파일 변경 로그가 표시됩니다. 또한 Github 데스크톱에서 파일이 이동 된 것을 볼 수 있습니다. 그러나 git log -10 --follow filename.cs이동 커밋 이전의 로그도 보여줍니다.
oleksa

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

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


3
5 년 전의 답변에이 정보가 있습니다.
dotancohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.