development

부모와 커밋을 어떻게 다른가요?

big-blog 2020. 2. 17. 22:18
반응형

부모와 커밋을 어떻게 다른가요?


별명이나 스크립트를 작성하는 것 외에도 특정 커밋에 대한 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


얼마나 멀리 있는지 아는 경우 다음과 같이 시도 할 수 있습니다.

# 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 보여줍니다 .


zsh를 사용하고 옵션 세트 가있는 경우 언급 된 많은 예 (예 : git diff 15dc8^!또는 git diff 15dc8^..15dc8)가 작동하지 않습니다 extendedglob. 다음 세 가지 방법 중 하나로이를 수정할 수 있습니다.

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

  2. setopt NO_NOMATCH (또는 .zshrc에 설정)

  3. 캐럿을 벗어나 백 슬래시로 매번 뱅 git diff 15dc8\^\!


git diff 15dc8 15dce~1

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


위의 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"

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



도와주세요.
반응형