git-파일이 추가 된 커밋 찾기


208

foo.js얼마 전에 커밋 된 파일이 있다고 가정하겠습니다 . 이 파일이 처음 추가 된 커밋을 간단히 찾고 싶습니다.

답변과 내 자신의 땜장이를 읽은 후에 이것은 나를 위해 작동

git log --follow --diff-filter=A --find-renames=40% foo.js

답변:


317

파이프 라인이 필요없는 더 간단한 "순수한 Git"방법입니다.

git log --diff-filter=A -- foo.js

설명서를 확인하십시오. 삭제, 수정 등에서 동일한 작업을 수행 할 수 있습니다.

https://git-scm.com/docs/git-log#Documentation/git-log.txt---diff-filterACDMRTUXB82308203

나는 항상 그것을 잊기 때문에 편리한 별칭이 있습니다.

git config --global alias.whatadded 'log --diff-filter=A'

이것은 다음과 같이 간단합니다.

git whatadded -- foo.js

아래는 하나의 라이너 재귀 서브 디렉토리를 검색한다 $PWD위해 foo.js파일을 공급하고 절대 또는 상대 경로 않고도 나 파일 필요는 같은 디렉토리에있을 것이다$PWD

git log --diff-filter=A -- **foo.js

27
+1! 그러나 내 파일은 하위 폴더에 있었으므로 전면에 별표를 추가 한 후에 만 ​​작동했습니다.git log --diff-filter=A -- *subfolder/foo.js
Geo

4
다른 브랜치에서 병합되었지만 병합을 수행하는 사용자가 병합하는 브랜치에 반드시 추가되지 않은 파일에 대해서는 어떻게 작동합니까?
g33kz0r

위의 문서 링크는 플래그 정보로 이동하지 않습니다. 게시 이후에 변경되었을 수 있습니다. git-scm.com/docs/git-log#Documentation/…
webbower

1
그러나 그들은 문서의 앵커 구조를 변경했습니다. 감사합니다!
stelterd 2014 년

@ geo 나는 당신이 말하는 것을 얻지 만 실제로는 아니라고 생각하지만 비슷한 유스 케이스를 가지고 있는데, 일반적으로 git 디렉토리의 프로젝트 루트 내에 머무르고 거기에서 명령을 발행하고 제공된 하나의 라이너를 사용하여 git log --diff-filter=A -- foo.js인쇄하지 않았습니다. 내 터미널에서 STDOUT에 ID / 해시를 커밋하기보다는 원하는 결과를 얻기 위해 git repo 루트에서 파일의 상대 경로를 제공해야했습니다.
ipatch


1

다음은 관심이 없을 수도 있지만 앞으로 도움이 될 것이며 Git의 생태계 디버깅의 일부입니다.

git-blame파일의 각 줄, 특히 파일 주석을 마지막으로 수정 한 개정 및 작성자를 표시하는 데 사용할 수 있습니다 . https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git 방문

예를 들어

git blame -L 174,190  xx.py

각 피연산자가 무엇을하는지 설명해 주시겠습니까? 관련 RTF에 대한 링크를 제공했지만 약간의 설명으로 게시물을 원 스톱 상점으로 만들 수 있습니다.
rossmcm

Pro-Git 서적에 따르면 코드에서 버그를 추적하고 언제 도입되었는지와 이유를 알고 싶다면 파일 주석이 가장 적합한 도구 인 경우가 많습니다. 파일의 각 줄을 수정 한 마지막 커밋이 무엇인지 보여 주므로,이 예제에서는 -L 옵션을 사용하여 출력을 174-190 행으로 제한하고 마지막 것은 확인하려는 대상 파일입니다 ( xx.py)이 경우에 파이썬 파일 @rossmcm
Reidel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.