별명이나 스크립트를 작성하는 것 외에도 특정 커밋에 대한 diff를 얻는 명령이 더 짧습니까?
git diff 15dc8^..15dc8
단일 커밋 id 만 제공하면 git diff 15dc8
해당 커밋을 HEAD와 비교합니다.
별명이나 스크립트를 작성하는 것 외에도 특정 커밋에 대한 diff를 얻는 명령이 더 짧습니까?
git diff 15dc8^..15dc8
단일 커밋 id 만 제공하면 git diff 15dc8
해당 커밋을 HEAD와 비교합니다.
답변:
사용하십시오 git show $COMMIT
. 커밋에 대한 로그 메시지와 해당 커밋의 차이점을 보여줍니다.
사용하다:
git diff 15dc8^!
git-rev-parse (1) 맨 페이지 의 다음 조각 (또는 최신 git gitrevisions (7) 맨 페이지)에 설명 된대로 :
커밋과 그 부모 커밋에 의해 형성된 집합의 이름을 지정하기위한 두 가지 다른 속기는 존재합니다. r1 ^ @ 표기법은 r1의 모든 부모를 의미합니다. r1 ^! 커밋 r1을 포함하지만 모든 부모를 제외합니다.
즉 , 수정이 필요한 git의 어느 곳에서나 15dc8^!
속기로 사용할 수 있습니다 15dc8^..15dc8
. 용 DIFF 는 명령 git diff 15dc8^..15dc8
으로서 이해된다 git diff 15dc8^ 15dc8
커밋의 부모 (차이 수단 15dc8^
) 및 커밋 ( 15dc8
).
참고 : git-rev-parse(1)
맨 페이지 의 설명 은 개정 범위 에 대해 설명합니다. 수정 범위 는 둘 이상의 부모와의 병합 커밋에도 작동해야합니다. 그런 다음 r1^!
" r1 --not r1^@
"즉 " r1 ^r1^1 ^r1^2 ...
"
또한 git show COMMIT
커밋에 대한 커밋 설명과 diff를 얻는 데 사용할 수 있습니다 . diff 만 원하면 사용할 수 있습니다git diff-tree -p COMMIT
^!
부모 속기 표기법은 정상 커밋에 대한 difftool 제대로 작동하지만은 diff는 병합 커밋에 대한 반전됩니다. 왜 그래?
얼마나 멀리 있는지 아는 경우 다음과 같이 시도 할 수 있습니다.
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
사전 커밋은 다음과 같이 작동합니다.
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
커밋을 지정할 수있는 많은 방법이 있습니다 :
# Great grandparent
git show HEAD~3
자세한 내용은 이 페이지를 참조하십시오 .
@mipadi가 지적했듯이을 사용할 수 git show $COMMIT
있지만 헤더와 커밋 메시지도 표시됩니다. 직선 차이를 원하면을 사용하십시오 git show --pretty=format:%b $COMMIT
.
이것은 분명히 짧은 손이 아니므 로이 별칭을 .gitconfig에 유지합니다.
[alias]
sd = show --pretty=format:%b
이 사용하는 저를 가능하게 git sd $COMMIT
하는 DIFF 보여줍니다 .
위의 Paul의 솔루션은 내가 기대했던대로했습니다.
$ git diff HEAD^1
또한 ~ / .gitconfig 파일의 [alias] 섹션에 다음을 입력하면 단축기를 사용하여 헤드와 이전의 차이를 볼 수 있습니다.
[alias]
diff-last = diff HEAD^1
그런 다음 $ git diff-last를 실행 하면 결과가 나타납니다. 참고이는 것 등 아직 커밋되지 않은 한 모든 변경뿐만 아니라 커밋 사이의 DIFF합니다. 아직 커밋하지 않은 변경 사항 을 무시 하려면 diff를 사용하여 HEAD를 HEAD의 부모와 직접 비교할 수 있습니다.
$ git diff HEAD^1 HEAD
별칭을 사용하므로 귀하의 질문에 정확하게 대답하지는 않지만 귀하가 의도 한 바를 수행하는 데 유용합니다 ...
alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"