특정 코드가 추가 된 커밋을 찾는 방법은 무엇입니까?


82

아래에 주어진 코드를 추가 한 커밋을 찾고 싶습니다.

if (getListView().getChildCount() == 0)
                getActivity().findViewById(android.R.id.empty).setVisibility(View.VISIBLE);

어떻게해야합니까?

답변:


77

git blame파일에서 실행하십시오 . 커밋 ID, 날짜 및 시간, 커밋 한 사람이 각 줄에 표시됩니다. 그런 다음 커밋 식별자를 복사하고 git log <commit>또는 에서 사용할 수 있습니다 git show <commit>.

예를 들어, 다른 커밋에 줄이 추가 된 test.txt라는 파일이 있습니다.

$ cat test.txt
First line.
Second line.

실행 git blame:

$ git blame test.txt
^410c3dd (Leigh 2013-11-09 12:00:00 1) First line.
2365eb7d (Leigh 2013-11-09 12:00:10 2) Second line.

첫 번째 비트는 커밋 ID, 이름, 날짜, 시간, 시간대, 마지막으로 줄 번호 및 줄 내용입니다.


22
문제는 파일이 추가 된 시점이 아니라 마지막으로 변경된 경우에만 표시된다는 것입니다.
ensonic

@ensonic이 답변은 그럴 경우 흥미로울 수 있습니다 (예 : 줄이 이동되었거나 공백이 변경된 경우) : stackoverflow.com/a/5816177/812680
mcls

3
추가 유용한 결과를 grep을하는 것입니다git blame test.txt | grep 'First line'
조나단 Lockley

3
그것은 OP의 질문에 대답하지 않습니다. 모든 저장소가 탭을 4 칸에서 2 칸으로 축소하기 위해 "코드 다시 들여 쓰기"변경을 거치는 문제가있었습니다. 그 순간부터 모든 자식 비난은 항상 코드를 다시 들여 쓴 사람을 드러냅니다. 그것을 소개 한 사람. git log -S가 트릭을 수행합니다.
Motti Shneor

78
git log -S searchTerm

검색어가 도입 된 커밋을 제공합니다.


7
OP가 추가 된 일부 코드 (파일 아님)를 검색하고 싶었으므로 이것이 최선의 대답이라고 생각합니다.
dr_

동의합니다. 모든 저장소가 탭을 4 칸에서 2 칸으로 축소하기 위해 "코드 다시 들여 쓰기"세션을 거치는 문제가있었습니다. 그 순간부터 모든 자식 비난은 항상 코드를 다시 들여 쓴 사람을 드러 낼 것입니다. -그것을 소개 한 사람이 아닙니다. git log -S가 트릭을 수행합니다.
Motti Shneor

42

전체 파일을 비난하는 것보다 더 빠른 것이 있습니다. 줄이 ${lineno}있고 파일이 ${filename}있으면 다음을 수행 할 수 있습니다.

git blame -L ${lineno},${lineno} ${filename}

예:

git blame -L 2,2 test.txt

5
이것은 실제로 질문에 대한 답이 아닙니다. 코드 줄이 변경되지 않았다면 말입니다. 이 코드 줄을 마지막으로 변경 한 사용자가 누구인지 알려줍니다. 그들을 소개 한 사람이 아닙니다. 그래도 git log -S는 할 것입니다. 그러나, 유용한 기술 ...
은 Motti Shneor

20
git log -S "mention here line of code" [file-path]    

예를 들면 :

git log -S "First line" test.txt         

대부분의 경우 특정 파일에 특정 코드 세그먼트를 도입 한 사람을 알고 싶기 때문에 파일 이름에 경로를 제공하는 것은 분명합니다.


실례합니다. 이해할 수 없습니다. "여기에 코드 줄에 언급"에 무엇을 입력해야합니까? 줄 번호? 실제 줄 내용? 검색 할 텍스트? 좀 더 명확 해 주시겠습니까?
Motti Shneor

1
확인. 나는 그것을 사용했고 결과에 놀랐습니다. 이것은 생명의 은인입니다. 정말. 다소 어색하고 형편없는 회사 저장소에서 일부 현명한 사람은 120 만 줄의 코드에서 탭 간격을 4에서 2로 변경하기로 결정했습니다. 물론 그 순간부터-git blame은 의미가 없습니다-왜냐하면 소스를 다시 들여 쓰는 것과 같은 불쾌한 커밋으로 모든 빌어 먹을 줄이 바뀌었기 때문입니다. 그래서-이것은 내가 코드 줄을 "발명 한"사람을 찾는 데 필요한 로프를주었습니다. 마지막 사람이 코드를 변경 한 사람은 아닙니다. 감사합니다. 큰 손.
Motti Shneor

감사합니다.
Anshul Singhal

1
Linux 터미널에서는 코드 줄에 작은 따옴표가 필요했습니다.git log -S 'some code' path/to/file.c
Daniel Holmes

이것은 생명의 은인이었습니다! 감사합니다!
Saif Al Falah

0

코드가 Git저장소 에서 유지 관리되고 intellijGit 플러그인과 함께 IDE가 코드를 탐색하는 데 사용되는 경우 다음과 같은 방법이 매우 직관적이라는 것을 알았습니다.

  1. 다음에서 파일 열기 intellij
  2. 컨텍스트 메뉴-> Git-> 주석으로 이동하십시오.
  3. 새 창의 각 줄이 해당 줄을 커밋 한 사람을 알려주는 새 창이 나타납니다.

다음 스크린 샷은 참조 용입니다.

여기에 이미지 설명 입력

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