답변:
diff 할 때 git이 이동 된 파일을 자동 감지하도록하려면 -M을 사용해야합니다. git diff
knittl 언급 한대로 사용하면 효과가 없습니다.
간단히 말해서 git diff -M
해야합니다.
이 스위치의 설명서는 다음과 같습니다.
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfig
?
git diff
. git diff -M
이름이 바뀐 단일 파일에서 실행 해도 이름이 변경되지 않습니다.
git log --follow -- file_after_move.txt
잘 작동합니다. 이동 전을 포함한 전체 역사를 보여줍니다. 어떤 아이디어? 나는 달리고있다 git version 2.11.0.windows.1
.
-C
사본을 검출하기위한 옵션이 유용과 유사하다. 나는 -M
하나의 파일을 두 개로 리팩토링 한 diff (원본과 이름이 일치하지 않는)를 볼 때 사용했습니다.
knittl이 쓴 것 외에도 항상 다음을 사용할 수 있습니다.
git diff HEAD:./oldfilename newfilename
여기서 HEAD:./oldfilename
현재 디렉토리를 기준으로 마지막 커밋 (HEAD의)에서 oldfilename을 의미합니다.
새로운 자식이 없다면 대신 사용해야합니다.
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
디렉토리에 있고 쌍 --
앞에 추가하지 않으면 저에게 효과적입니다 commit:path
. Git은 문법이 매우 까다로워 보입니다.
<commit-ish>:<pathname>
문법은 Git-ish라는 객체 식별자입니다. 후 --
힘내 파일 이름 만 기대하고있다.
git 2.9 (2016 년 6 월)를 사용하면 -M
더 이상 추가 할 필요가 없습니다. 기본적으로 git diff
사용 -M
합니다.
참조 5404c11 커밋 , 9501d19 커밋 , a9276a6 커밋 , f07fc9e 커밋 , 62df1e6 커밋 에 의해 (2016년 2월 25일) 마티유 Moy와을 ( moy
) .
( Junio C gitster
Hamano 에 의해 합병 -- 커밋 5d2a30d , 2016 년 4 월 3 일)
diff
:diff.renames
기본적으로 활성화이름 변경 감지는 매우 편리한 기능이며, 새로운 사용자는이를 활용하기 위해 설명서를 파헤칠 필요가 없습니다.
이름 변경 감지를 활성화하는 데 대한 반대 의견은 때때로 실패하고 때로는 느리다는 것입니다. 그러나 "
git status
"및 "git merge
" 와 같은 여러 경우에 기본적으로 이름 바꾸기 감지가 이미 활성화되어 있으므로 활성화diff.renames
해도 기본적으로 상황이 변경되지는 않습니다. 이름 변경 감지에 실패하면 이제 "git diff
"와 "git status
" 간에 일관되게 실패합니다 .이 설정은 배관 명령에 영향을 미치지 않으므로 잘 작성된 스크립트에는 영향을 미치지 않습니다.
git diff -M
다른 사람들이 말한 것처럼 이름 바꾸기 감지를 활성화합니다 (@VonC가 지적했듯이 기본적으로 git 2.9에서 활성화됩니다). 그러나 대규모 변경 세트가있는 경우 부정확 한 이름 변경 감지 기능이 여전히 다시 꺼질 수 있습니다. Git은 다음과 같은 경고를 표시하는데, 사용자가보고있는 diff 중에 놓치기 쉽습니다.
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
이 경우 git에서 제안한대로 구성 옵션을 설정하십시오 (예 :
git config diff.renamelimit 450
diff 명령을 다시 실행하십시오.
어떤 이유로 든 HEAD:./oldfilename
(또는 절대 경로)를 사용하면 효과가 HEAD:oldfilename
없었지만 (cmn 덕분에)
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
없습니까?
git diff
인수없이 간단히 실행 하십시오 git diff -- newfilename
. git은 올바른 파일 / 콘텐츠를 비교할 수있을 정도로 똑똑합니다 (예 : 이름을 바꾸기 전의 원래 내용을 이름을 바꾼 후 변경된 내용으로)
git mv
하나의 파일을 만든 다음 단계적 상태를 다른 동일 지점과 비교하면 " -M
사용 하지 않는 한"모든 항목이 삭제되었다가 다시 작성됩니다 "diff 가 생성됩니다.
git diff -- yourRenamedFile
합니다. 아래 답변을