etc./StackOverFlow

숨김에 대한 Git diff

청렴결백한 만능 재주꾼 2022. 2. 15. 08:49
반응형

질문자 :Heavy Gray


un-stash가 현재 작업 트리에 미치는 변경 사항을 어떻게 볼 수 있습니까? 적용하기 전에 어떤 변경 사항이 적용되는지 알고 싶습니다!



가장 최근 보관함 보기:

 git stash show -p

임의의 은닉처 보기:

 git stash show -p stash@{1}

git stash 맨페이지에서:

기본적으로 이 명령은 diffstat를 표시하지만 git diff로 알려진 모든 형식을 허용합니다(예: git stash show -p stash@{1}를 사용하여 두 번째로 최근 숨김을 패치 형식으로 볼 수 있음).


Amber

가장 최근의 보관함을 보려면:

 git stash show -p

임의의 은닉물을 보려면:

 git stash show -p stash@{1}

또한 git diff를 사용하여 stash를 모든 분기와 비교합니다.

당신이 사용할 수있는:

 git diff stash@{0} master

분기 마스터와 비교하여 모든 변경 사항을 보려면.


또는 다음을 사용할 수 있습니다.

 git diff --name-only stash@{0} master

변경된 파일 이름만 쉽게 찾을 수 있습니다.


czerasz

숨김 변경 사항의 기반이 되는 분기가 그동안 변경된 경우 이 명령이 유용할 수 있습니다.

 git diff stash@{0}^!

이것은 stash를 기반으로 하는 커밋과 비교합니다.


theintz

작업 트리가 더티 인 경우 먼저 더티 작업 트리를 커밋한 다음 이를 스태시와 비교하여 이를 스태시와 비교할 수 있습니다. 그 후에 더티 작업 트리를 사용하여 커밋을 취소할 수 있습니다(커밋 로그에 더티 커밋을 포함하고 싶지 않을 수 있기 때문에).

다음 접근 방식을 사용하여 두 개의 은닉을 서로 비교할 수도 있습니다(이 경우 처음에는 은닉 중 하나를 팝합니다).

  • 더러운 작업 트리를 커밋하십시오.

     git add . git commit -m "Dirty commit"
  • 해당 커밋으로 숨김을 비교하십시오.

     git diff HEAD stash@{0}
  • 그런 다음 나중에 커밋을 되돌리고 작업 디렉토리에 다시 넣을 수 있습니다.

     git reset --soft HEAD~1 git reset .

이제 당신은 더러운 작업 나무를 당신의 은닉처와 구별했고, 당신이 처음에 있던 곳으로 돌아갔습니다.


Magne

@Magne의 답변 은 질문에 대한 가장 유연하고 유용한 해석에 답변하는 유일한 (매우 늦은) 날짜이지만 필요한 것보다 훨씬 더 복잡합니다. 커밋하고 재설정하는 대신 작업 복사본을 숨기고 비교한 다음 숨김을 해제하면 됩니다.

 git stash save "temp" git diff stash@{0} stash@{1} git stash pop

이는 임시로 작업 폴더 변경 사항을 숨김 스택의 상단(stash@{0})으로 만들고 원래의 위에서 아래로 이동(stash@{1})하여 숨김 스택의 상단과 작업 폴더 간의 차이점을 보여줍니다. ) 그런 다음 '새 세트' 위치에서 원래 상단을 사용하여 비교하여 현재 작업의 상단에 적용할 경우 변경 사항을 확인합니다.

"하지만 현재 일이 없으면 어떻게 합니까?" 그렇다면 당신은 평범한 지루한 경우입니다. @Amber의 답변을 사용하십시오.

 git stash show

또는 @czerasz의 답변

 git diff stash@{0}

또는 stash 및 unstashing이 어쨌든 빠르고 쉽다는 것을 인정하고 변경 사항을 unstash하고 검사하십시오. 그 순간에 그것들을 원하지 않는다면 그것들을 버리십시오(현재 색인/작업 폴더 변경). 완전히 그

 git stash apply git diff git reset git checkout

SensorSmith

stash를 비교하려는 항목(로컬 작업 트리/부모 커밋/헤드 커밋)에 따라 실제로 사용할 수 있는 몇 가지 명령이 있으며 그 중 좋은 오래된 git diff 와 더 구체적인 git stash show :

 ╔══════════════════════╦═══════════════════════════════╦═══════════════════╗ ║ Compare stash with ↓ ║ git diff ║ git stash show ║ ╠══════════════════════╬═══════════════════════════════╬═══════════════════╣ ║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║ ║----------------------║-------------------------------║-------------------║ ║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║ ║----------------------║-------------------------------║-------------------║ ║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║ ╚══════════════════════╩═══════════════════════════════╩═══════════════════╝

git stash show 가 첫눈에 더 사용자 친화적으로 보이지만 git diff 는 더 집중된 diff에 대한 파일 이름을 지정할 수 있다는 점에서 실제로 더 강력합니다. 내 zsh git plugin 에서 이러한 모든 명령에 대한 별칭을 개인적으로 설정했습니다.


David Deprost

만일을 대비하여 작업 트리와 stash에 있는 파일을 비교하려면 아래 명령을 사용하십시오.

 git diff stash@{0} -- fileName (with path)

Pramod B R

이것은 git 버전 1.8.5.2에서 작동합니다.

 git diff stash HEAD

Rimian

비교용 도구가 있는 경우(예: 비교 불가)

 git difftool stash HEAD

yerlilbilgin

아무것도 이동하지 않고 이를 수행하는 한 가지 방법은 patch 가 git diff(기본적으로 통합된 diff)를 읽을 수 있다는 사실을 활용하는 것입니다.

 git stash show -p | patch -p1 --verbose --dry-run

그러면 패치가 일반적으로 수행하는 작업에 대한 단계별 미리보기가 표시됩니다. 이것에 대한 추가 이점은 패치가 작업 트리에 패치를 작성하는 것을 자체적으로 방지하지 않는다는 것입니다. 어떤 이유로 git이 수정 전 커밋에 대해 종료해야 하는 경우 계속해서 --dry-를 제거해야 합니다. 자세한 지침을 실행하고 따르십시오.


xenithorb

git diff <current-branchname>..stash@{0} 가 로컬 작업 트리와 가장 최근의 숨김 사이의 변경 사항을 비교하는 가장 직관적인 방법이라고 생각합니다. stash@{0} 를 해당하는 숨김 번호로 바꿉니다.

git diff stash@{0} 가 잘못된 결과를 생성할 수 있다는 점에 유의하세요. stash와 현재 브랜치의 두 기록이 분기된 경우 diff는 stash에 모든 새로운 항목을 추가하고 현재 브랜치에 고유한 모든 것을 제거하는 것처럼 보입니다.

git book을 기반으로 한 답변

또한 이중 점 .. 및 삼중 점 ... 서로 다른 커밋 비교를 지정하며 이 답변에 대해 이중 점을 참조하고 있습니다. 자세한 내용은 git book을 참조하십시오.


ciiyan

나는이 스레드와에서 배운 것을 결합 이 하나의 내가 "숨김 안에 무엇인지"를 참조 할 때, 내가 먼저 실행 :

 git stash show stash@{0}

어떤 파일이 수정되었는지 보여줍니다. 그런 다음 difftool에서 멋진 시각적 차이점을 얻으려면 다음을 수행합니다.

 git difftool --dir-diff stash@{0} stash@{0}^

이것은 부모에 대해 주어진 숨김의 모든 차이점을 한 번에 표시합니다.

~/.gitconfig 에서 diff 도구를 구성할 수 있습니다(예: Meld 사용).

 ... [diff] tool = meld

Ferrard

그녀는 은닉 목록

 git stash list stash@{0}: WIP on feature/blabla: 830335224fa Name Commit stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

그래서 숨김 번호를 얻고 다음을 수행하십시오.

넌 할 수있어:

 git stash show -p stash@{1}

당신이 사랑하는를 원한다면 (이 그 나는이 대답을 쓰는 이유.의, 마리화나를 보여 다른 Diff 지사에서 현재 코드를 고려하고 show 당신이 적용됩니다 것을 보여줍니다)

당신이 사용할 수있는:

 git diff stash@{0}

또는

 git diff stash@{0} <branch name>

또 다른 흥미로운 작업은 다음과 같습니다.

 git stash apply git stash apply stash@{10}

이것은 목록에서 제거하지 않고 숨김을 적용합니다 git checkout . 이러한 변경 사항을 제거하거나 원하는 경우 git stash drop stash@{10} 목록에서 숨김을 제거합니다.

git stash pop git stash applygit stash drop 의 조합을 사용하는 것은 절대 권장하지 않습니다. 잘못된 분기에 stash를 적용하면... 가끔 코드를 복구하기가 어렵습니다.


Raúl Martín

FWIW 이것은 다른 모든 답변에 약간 중복될 수 있으며 허용되는 답변과 매우 유사합니다. 하지만 아마도 누군가를 도울 것입니다.

git stash show --help 필요한 모든 것을 제공합니다. 숨김 쇼 정보를 포함합니다.

쇼 [<stash>]

stash에 기록된 변경 사항을 stashed 상태와 원래 부모 간의 차이점으로 표시합니다. no가 주어지면 가장 최근의 것을 보여줍니다. 기본적으로 이 명령은 diffstat를 표시하지만 git diff로 알려진 모든 형식을 허용합니다(예: git stash show -p stash@{1}를 사용하여 두 번째로 최근 숨김을 패치 형식으로 볼 수 있음). stash.showStat 및/또는 stash.showPatch 구성 변수를 사용하여 기본 동작을 변경할 수 있습니다.


Rockin4Life33

출처 : http:www.stackoverflow.com/questions/7677736/git-diff-against-a-stash

반응형