programing

부모와 약속을 나누는 방법

abcjava 2023. 5. 26. 20:23
반응형

부모와 약속을 나누는 방법

별칭이나 스크립트를 작성하는 것 외에 특정 커밋에 대한 디프를 얻기 위한 더 짧은 명령이 있습니까?

git diff 15dc8^..15dc8

단일 커밋 ID만 제공하는 경우git diff 15dc8그것은 HEAD에 대한 죄를 짓지 않습니다.

사용하다git show $COMMIT커밋에 대한 로그 메시지와 특정 커밋의 차이가 표시됩니다.

사용:

git diff 15dc8^!

다음 git-rev-parse(1) man 페이지(또는 현대의 gitrevisions(7) man 페이지)에서 설명한 바와 같이,

커밋과 상위 커밋으로 구성된 집합의 이름을 지정하기 위한 다른 두 가지 단축형이 있습니다.r1^@ 표기법은 r1의 모든 부모를 의미합니다. r1^!은 commiter1을 포함하지만 모든 부모를 제외합니다.

즉, 다음을 사용할 수 있습니다.15dc8^!의 약어로15dc8^..15dc8수정이 필요한 Git의 모든 곳.diff 명령의 경우,git diff 15dc8^..15dc8로 이해됩니다.git diff 15dc8^ 15dc8즉, 커밋의 상위 항목 간의 차이(15dc8^) 및 커밋(15dc8).

참고: 의 설명git-rev-parse(1)man 페이지는 두 개 이상의 부모와 병합 커밋에 대해서도 작동해야 하는 개정 범위에 대해 설명합니다.그리고나서r1^!는 "입니다.r1 --not r1^@예를 들어.r1 ^r1^1 ^r1^2 ..."


또한 사용할 수 있습니다.git show COMMIT커밋에 대한 설명을 가져오고 커밋에 대한 차이를 확인합니다.만약 당신이 디프만 원한다면, 당신은 사용할 수 있습니다.git diff-tree -p COMMIT.

얼마나 오래 전인지 알면 다음과 같은 방법을 사용할 수 있습니다.

# 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

자세한 내용은 이 페이지를 참조하십시오.

미파디가 지적했듯이, 당신은git show $COMMIT그러나 일부 헤더와 커밋 메시지도 표시됩니다.직선적인 차이를 원한다면,git show --pretty=format:%b $COMMIT.

이것은 분명히 매우 짧은 손이 아니기 때문에 저는 이 별칭을 제 .gitconfig에 보관하고 있습니다.

    [alias]
      sd = show --pretty=format:%b

이를 통해 사용할 수 있습니다.git sd $COMMIT차이를 보여주기 위해.

언급된 많은 예(예:git diff 15dc8^!또는git diff 15dc8^..15dc8) Z 셸을 사용하고 있고 다음이 있는 경우에는 작업하지 마십시오.extendedglob옵션 세트.다음 세 가지 방법 중 하나로 이 문제를 해결할 수 있습니다.

  1. unsetopt extendedglob(및/또는 .zshrc에서 제거)

  2. setopt NO_NOMATCH(및/또는 .zshrc로 설정)

  3. 캐럿에서 벗어나 백슬래시를 사용하여 매번 쾅 소리를 냅니다. 예를 들어,git diff 15dc8\^\!

git diff 15dc8 15dce~1

~1은 '부모', ~2는 '조부모' 등을 의미합니다.

폴의 해결책은 제가 기대했던 것과 같습니다.

$ git diff HEAD^1

또한 언급된 과 같은 별칭을 추가하는 것도 유용합니다.~/.gitconfig 파일의 [alias] 섹션에 다음을 입력하면 단축키를 사용하여 헤드와 이전 사이의 차이를 볼 수 있습니다.

[alias]
    diff-last = diff HEAD^1

그런 다음 $git diff-last를 실행하면 결과를 얻을 수 있습니다.여기에는 커밋 간의 차이뿐만 아니라 아직 커밋하지 않은 변경 사항도 포함됩니다.아직 커밋하지 않은 변경 사항을 무시하려면 diff를 사용하여 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"

언급URL : https://stackoverflow.com/questions/436362/how-to-diff-a-commit-with-its-parent

반응형