이동되거나 이름이 바뀐 파일에서 git diff를 수행하는 방법은 무엇입니까?
을 사용하여 파일을 옮겼습니다 git mv
. 이제 새 파일을 다른 파일과 비교하여 이전 파일 (이전의 존재하지 않는 이름으로)과 비교하고 싶습니다.
어떻게해야합니까?
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.
knittl이 쓴 것 외에도 항상 다음을 사용할 수 있습니다.
git diff HEAD:./oldfilename newfilename
여기서 HEAD:./oldfilename
현재 디렉토리를 기준으로 마지막 커밋 (HEAD의)에서 oldfilename을 의미합니다.
새로운 자식이 없다면 대신 사용해야합니다.
git diff HEAD:path/to/oldfilename newfilename
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
" 간에 일관되게 실패합니다 .이 설정은 배관 명령에 영향을 미치지 않으므로 잘 작성된 스크립트에는 영향을 미치지 않습니다.
어떤 이유로 든 HEAD:./oldfilename
(또는 절대 경로)를 사용하면 효과가 HEAD:oldfilename
없었지만 (cmn 덕분에)
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
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 명령을 다시 실행하십시오.
git diff
인수없이 간단히 실행 하십시오 git diff -- newfilename
. git은 올바른 파일 / 내용 (예 : 이름을 바꾼 후 원래 내용을 이름을 바꾼 후 변경된 내용으로 비교) 할만 큼 똑똑합니다
참고 URL : https://stackoverflow.com/questions/5730460/how-to-do-a-git-diff-on-moved-renamed-file
'Programing' 카테고리의 다른 글
ECMAScript 6에서 JSON 파일을 가져 오는 방법은 무엇입니까? (0) | 2020.07.17 |
---|---|
C ++에서 코드 스 니펫의 실행 시간을 계산하는 방법 (0) | 2020.07.17 |
양식이로드 된 후 코드를 어떻게 실행합니까? (0) | 2020.07.17 |
ReSharper / C #에서 "감산 뺄셈에 예기치 않은 결과가 있습니까?" (0) | 2020.07.16 |
sqlite 데이터베이스를 쿼리 할 때 커서를 만들어야하는 이유는 무엇입니까? (0) | 2020.07.16 |