파일 X의 (약간 다른) 버전이 있는 2개의 서로 다른 분기 A, B가 있습니다.
특정 패턴을 추가하는 브랜치 B에서 커밋을 가져오는 데 관심이 있습니다.
내가 대략적으로 한 일: diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done
이것은 작동하지만 git에서 쉽게 지원되는 것을 찾기 위해 재창조/순환하는 것인지 궁금합니다.
더 좋은 방법이 있나요?
답변1
원하는 정보를 결합 git blame
하고 얻을 수 있다고 생각합니다 .git merge-base
git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN"
이는 A와 B 사이의 공통 조상을 찾은 다음 공통 조상보다 이전의 모든 항목을 무시하고 git blame
해당 공통 조상에서 실행됩니다 (기호는 조상에서 시작하여 현재 헤드에서 끝나는 개정을 보는 것을 나타냄 ). 출력에 줄 번호를 추가합니다. 그런 다음 공통 조상 이후 변경되지 않은 모든 행을 제거하고 마지막으로 변경된 행에서만 패턴을 찾습니다. 비역방향 모드에서는 현재 파일에 있는 행만 표시되므로 결과에는 필터와 정확히 동일하게 추가되거나 수정된 행만 포함 됩니다 .file
..
git blame
-n
grep -v "^^"
grep "$PATTERN"
git blame
^\+