source

intit, stash를 적용하지 않고 추적되지 않은 stash 파일을 보여줄 수 있는 방법이 있습니까?

manycodes 2023. 9. 8. 21:37
반응형

intit, stash를 적용하지 않고 추적되지 않은 stash 파일을 보여줄 수 있는 방법이 있습니까?

뛰면git stash -u, 추적되지 않은 파일을 숨겨둘 수 있습니다.그러나 추적되지 않은 파일은 다음과 같이 표시되지 않습니다.git stash show stash@{0}. 스테이징을 적용하지 않고 추적되지 않은 스테이징 파일을 보여줄 수 있는 방법이 있습니까?

추적되지 않은 파일은 스테이시 커밋의 세번째 부모에 저장됩니다.(실제로 문서화된 것은 아니지만 -u 기능을 도입한 커밋 787513...과 문구에 대한 나머지 문서화 방식을 보면 꽤 분명합니다.아니면 그냥 하는 것만으로git log --graph 'stash@{0}')

다음을 통해 스테이시의 "추적되지 않은" 부분만 볼 수 있습니다.

git show 'stash@{0}^3'

또는 "추적되지 않은" 트리 자체는 다음을 통해 다음과 같습니다.

git show 'stash@{0}^3:'

또는 트리에 있는 특정 "추적되지 않은" 파일은 다음을 통해 다음과 같습니다.

git show 'stash@{0}^3:<path/to/file>'

안타깝게도 모든 staged+unstaged+unstaged+untracked와 "현재" 상태 간의 차이점을 요약할 수 있는 좋은 방법은 없습니다.git show 'stash@{0}'추적되지 않은 파일을 포함하도록 만들 수 없습니다.이는 stash commit 자체의 트리 개체, 즉stash@{0}:, 는 세 번째 "사용되지 않은" 부모에서 변경된 내용을 포함하지 않습니다.

이는 스테이시를 다시 적용하는 방식 때문입니다. 추적된 파일은 패치로 쉽게 적용할 수 있는 반면 추적되지 않은 파일은 이론적으로 "전체 파일"로만 적용할 수 있습니다.

다음 명령을 사용하여 모든 스테이시 커밋을 나열할 수 있습니다.

git rev-list -g stash

스테이시는 HEAD, 인덱스의 3방향 병합 커밋, 미추적 파일의 부모 없는 "루트" 커밋으로 표현되므로, 미추적 파일 스테이시는 위의 출력을 다음과 같이 파이핑하여 나열할 수 있습니다.

git rev-list -g stash | git rev-list --stdin --max-parents=0

위의 유용한 응용 프로그램:

추적되지 않고 숨겨진 파일만 표시

git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat

물론입니다. 제거합니다.--stat파일 내용을 확인합니다.

특정 파일 찾기

git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>

추적되지 않은 파일

git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>

모든 스테이시의 모든 내용 나열

git rev-list -g stash | git rev-list --stdin | xargs git show --stat

추적되지 않은 파일을 스테이시에 나열하려면:

git ls-tree -r stash@{0}^3 --name-only

(내용이 있는) 추적되지 않은 모든 파일의 완전한 차이를 표시하려면:

git show stash@{0}^3

이러한 명령은 마지막(가장 최근) 스테이시를 읽습니다.이전의 스태시의 경우 "stash@" 뒤의 숫자를 늘립니다. 예를 들어,stash@{2}지난 번의 비밀에서 두 번째로

이것이 효과가 있는 이유는git stash를 참조할 수 있는 각 스테이시에 대한 병합 커밋을 만듭니다.stash@{0},stash@{1}등. 이 커밋의 첫 번째 부모는 스테이시 시점의 HEAD이고, 두 번째 부모는 추적된 파일에 대한 변경 사항을 포함하며, 세 번째(존재하지 않을 수도 있음)는 추적되지 않은 파일에 대한 변경 사항을 포함합니다.

이것은 "토론"의 맨페이지에서 부분적으로 설명됩니다.

되지 않은 은 과 되지 되지 되지 되지 git stash show stash@{0}.

참고: Git 2.11(2016년 4분기, is OP 이후 4년) 이후로 인덱스만으로 stash를 참조할 수 있습니다.

git stash show 0

는으로 인해 버그가 했습니다.git stashC로 다시 작성 중, Git 2.22 (2019년 2분기)로 수정됨

스테이징을 적용하지 않고 추적되지 않은 스테이징 파일을 보여줄 수 있는 방법이 있습니까?

네, Git 2.32(2021년 2분기, OP 이후 9년)가 있는 이유는 무엇입니까?

git stash show --include-untracked

# or
git config --global stash.showIncludeUntracked true
git stash show

"git stash show추적되지 않은 부분을 선택적으로 보여주는 법을git stash show(man) 배웠습니다.

Denton Liu()Denton-Ld3c7bf7(2021년 3월 3일) 커밋 0af760e를 참조하십시오.
(주니오 C 하마노 ---- 커밋 f5c73f6, 2021년 3월 22일)

stash showstash show가르치다--include-untracked그리고.--only-untracked

사인 오프 바이: Denton Liu

를 통해 추적되지 않은 파일을 사용하여 스테이시 항목을 만들 수 있습니다.

그러나 추적되지 않은 파일은 stash 항목 자체가 아닌 stash 항목의 세 번째 부모에 저장되므로 실행 중에 diff의 일부로 추적되지 않은 파일이 포함되지 않습니다.

와 함께--include-untracked 사항이 있는 됩니다. stash base와 working tree 에 수정 사항이 있는 경로는 가 의 와 에 는 이 됩니다 와 되며 에 됩니다 이 와 에 되지 .

임시 보관 항목에서 추적되지 않은 중복 파일이 추적된 파일을 마스킹하는 잘못된 형식의 보관 항목을 수동으로 만들 수 있습니다.
우리는 관습을 통해 그 경우를 감지하고 오류를 범합니다.unpack_trees()백:stash_worktree_untracked_merge().

또한, , 을 .--only-untrackedentry.stash지은만는hn하는 옵션의 추적되지 하는 option
이와 유사하지만 사용자가 기본 구현에 대해 생각할 필요가 없도록 편리한 추상화를 제공하는 것이 좋습니다.

git stash이제 맨 페이지에 포함됩니다.

'git stash' show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]

git stash이제 맨 페이지에 포함됩니다.

--no-include-untracked

할 할 push그리고.save되지 않은 모든 어,되지,도,든으로 됩니다.git clean.

할 할 show명령, diff의 일부로 stash 항목에 있는 추적되지 않은 파일을 표시합니다.

--only-untracked

은 은 만 합니다 유효합니다.show지휘.
diff의 stash의 되지 않은 합니다.


다음과 같은 새로운 옵션을 사용할 수 있는 구성이 있습니다.

stash showstash show배우다stash.showIncludeUntracked

사인 오프 바이: Denton Liu

이전 커밋이 가르칩니다.
Δ Δ Δ Δ Δ Δ Δ Δ Δ 를 활성화할 수 있는 것이 수 .--include-untracked행동.
티치 더stash.showIncludeUntracked이로을할수록는션이가과g는g션록hnrnrasoosso가수과할한stash.showPatch.

git config이제 맨 페이지에 포함됩니다.

stash.showIncludeUntracked

true로 , ② true ③ ④,git stash show옵션이 없는 명령은 stash 항목의 추적되지 않은 파일을 표시합니다.

기본값은 false입니다.

git stash이제 맨 페이지에 포함됩니다.

을 사용할 수 .stash.showIncludeUntracked,stash.showStat,그리고.stash.showPatch기본 동작을 변경하는 config variables.


Git 2.32(2021년 2분기)를 통해 이러한 옵션이 미추적 부분을 기록하지 않는 스테이시 항목에서 사용되었을 때 장애가 발생한 스테이시 segf의 미추적 부분을 중심으로 최근 옵션을 처리할 코드가 "git stash show(man)에 추가되었습니다.

Denton Liu()Denton-L의 커밋 1ff595d, 커밋 aa2b05d(2021년 5월 12일) 참조.
(주니오 C 하마노 ---- 2021년 5월 16일 a8a2491로 합병)

stash showstash show잘못을 고치다--{include,only}-untracked

사인 오프 바이: Denton Liu

추적되지 않은 항목이 포함되지 않은 스테이시에서 또는 실행될 때 segfault가 발생합니다.

이는 추적되지 않은 항목이 실제로 존재하는지 확인하지 않고 무작정 참조를 취소하려고 하기 때문에 발생합니다.

추적되지 않은 항목이 있는지 확인한 후 실제로 참조를 취소합니다.

그리고:

Liu Denton-LDenton()의 af5cd44(2021년 5월 21일)를 참조하십시오.
(2021년 5월 22일 주니오 C 하마노 ---- 커밋 378c7c6에 합병)

stash showstash show쓰임새stash.showIncludeUntracked할 때에도diff 지정됨

사인 오프 바이: Denton Liu

diff가 표시되는 방법과 관련된 옵션이 제공되는 경우 명령은stash.showIncludeUntracked기본적으로 추적되지 않은 파일을 표시하지 않도록 설정합니다.
되지 않은 이지 않은 입니다.diff의과지은을지가로로다는지은다지은는s로의ef로settdfret가frhelt

사용하다stash.showIncludeUntracked다른 선택권이 주어졌을 때에도 말입니다.
물론 명령줄 옵션을 통해 이 옵션을 재정의할 수도 있습니다.

diff 옵션이 주어졌을 때 무시될 구성 변수를 명시적으로 알려주도록 설명서를 업데이트합니다.

git config이제 맨 페이지에 포함됩니다.

이 설정이 다음과 같다면true , , , , , , , , , , , , , , , , , , .git stash show명령어는 스테이시 항목의 추적되지 않은 파일을 표시합니다.

은 :false.

git stash이제 맨 페이지에 포함됩니다.

안되면<diff-option>제공되며, 가되며,본은에 의해 됩니다.stash.showStat,그리고.stash.showPatchconfig 변수.

사용할 수도 있습니다.stash.showIncludeUntracked여부를 정하다--include-untracked는 기본적으로 활성화됩니다.

스테이시에 있는 모든 파일(추적되지 않은 파일과 추적되지 않은 파일 모두)을 보기 위해 다음 별칭을 구성에 추가했습니다.

showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"

보려는 스테이시에 대해 단일 인수가 필요합니다.두 개의 연속 목록으로 표시됩니다.

if...fi섹션은 통과되지 않은 경우 bash 인수 $1을 0으로 변경합니다.

해결 방법:파일을 스테이징하기 전에 파일을 스테이징하면git stash show -p기대한 대로의 일

git add .
git stash save

참고: 이렇게 하면 상호작용 부분을 추가할 수 있습니다. 여기 방법이 있습니다.
주의:이전에 준비한 작업이 없는지 확인하십시오. 그렇지 않으면 작업을 구별할 수 없습니다.
이것은 유용할지도 모릅니다.

git가 2.32 이하인 미추적 파일로 정확한 은닉처를 찾아 적용하는 데 어려움을 겪었습니다.

추적되지 않은 파일과 날짜가 있는 은닉처를 찾기 위해 명령을 사용했습니다.

git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat

다른 명령을 사용하여 특정 날짜가 포함된 정확한 스테이징 위치를 찾기 위해 날짜가 포함된 스테이징 목록을 표시한 후:

git stash list --date=local

그리고 나서 다시 사용합니다.git stash liststage의 이름을 찾아서 다음과 같이 적용하기 위해git stash apply.

그것은 저에게 효과가 있었습니다.이것이 다른 누군가에게 효과가 있기를 바랍니다!

언급URL : https://stackoverflow.com/questions/12681529/in-git-is-there-a-way-to-show-untracked-stashed-files-without-applying-the-stas

반응형