예

텍스트 파일에 사용자 이름 목록이 있습니다. 이 파일을 업데이트하고 제출합니다. 마지막 커밋 이후 변경 사항 목록을 얻는 방법을 찾고 있습니다.

diff 형식이 전혀 필요하지 않습니다. 마지막 커밋 이후 출력이 한 줄에 하나의 사용자 이름이 되도록 하고 싶습니다(각 커밋에 추가됨).

출력에서 모든 git diff 구문을 제거하는 설정을 찾을 수 없으므로 순전히 방금 추가된 새 줄의 목록입니다.

원본 파일:

user1
user2
user3

그런 다음 추가합니다.

user4
user5

그런 다음 제출하세요.

나는 git diff를 수행하고 다음을 볼 수 있기를 원합니다.

user4
user5

답변1

Lookahead/lookbehind를 grep diff 출력에 결합할 수 있습니다.

git diff --unified=0 | grep -Po '(?<=^\+)(?!\+\+).*'
  • (?<=^\+)다음으로 시작하는 줄에 대한 긍정적인 검토입니다.+
  • (?!\+\+)과의 일치를 방지하기 위한 부정적인 예측입니다 +++ a/path/to/file.

git 옵션 --unified=0은 제거된 diff 컨텍스트를 필터링하는 줄 수를 줄이는 것이지만 선택 사항입니다.

더 좋은 것이 있을 수도 있습니다. 저는 PCRE에 능숙하지 않습니다.

답변2

kaiko의 답변을 빌리면 --unified=0다음과 같은 결과를 얻습니다.

git diff HEAD^ HEAD --unified=0 | tail +6 | sed -e 's/^\+//'

관련 정보