답변:
더티 작업 복사본에 숨김 변경 사항을 적용해야하는 경우 (예 : 숨김에서 둘 이상의 변경 세트를 팝업) 다음을 사용합니다.
$ git stash show -p | git apply -3 && git stash drop
기본적으로
위의 한 줄짜리처럼 정확하게 작동 해야하는 -f
(강제) 옵션 이없는 이유가 궁금 git stash pop
합니다.
그 동안이 하나의 라이너를 자식 별칭으로 추가 할 수 있습니다.
$ git config --global --replace-all alias.unstash \
'!git stash show -p | git apply -3 && git stash drop'
$ git unstash
-3
3 방향 병합을 통해 직접 충돌을 해결할 수 있는 매개 변수 를 지적한 @SamHasler에게 감사합니다 .
git stash apply
는 작업 복사본이 더러운 경우 숨김 변경 사항을 적용하지 않습니다. 따라서 git stash show -p | git apply
일종의 강제 숨김이 적용되는 것을 볼 수 있습니다.
나는 이런 식으로합니다 :
git add -A
git stash apply
그런 다음 (선택 사항) :
git reset
git add -u
같은 인 -A
은 비 추적 파일을 추가하지 않습니다 제외.
패치 파일로 원하는 숨김을 내보내고 수동으로 적용하여 현재 변경 사항을 숨기지 않고도이 작업을 수행 할 수 있습니다.
예를 들어, stash @ {0}을 더티 트리에 적용한다고 가정하십시오.
stash @ {0}을 패치로 내보내기 :
git stash show -p stash @ {0}> Stash0.patch
변경 사항을 수동으로 적용하십시오.
자식 적용 Stash0.patch
두 번째 단계가 실패하면 Stash0.patch 파일을 편집하여 오류를 수정 한 후 git apply를 다시 시도하십시오.
git reset으로 작업 디렉토리를 정리하거나 변경 사항을 커밋하거나 현재 변경 사항을 숨기려면 다음을 시도하십시오.
$ git stash save "현재 변경 사항 설명" $ git stash pop stash @ {1}
현재 변경 사항을 숨기고 숨김 스택에서 두 번째 숨김을 팝합니다.
Mathias의 솔루션은 git stash pop --force와 가장 가까운 솔루션입니다 (실제로 citmon Git devs,이 옵션을 이미 사용하십시오!)
그러나 git 명령 만 사용하여 동일한 작업을 수행하려면 다음을 수행하십시오.
즉, 현재 변경 사항을 커밋하십시오 (우리는 절대로 밀어 넣지 않을 것입니다). 이제 작업 공간이 깨끗해졌습니다. 이제 이전 변경 사항에 대한 수정 사항으로 숨김 변경 사항을 적용하십시오. 이제 한 번의 커밋 ( "Fixme")으로 두 변경 세트가 결합되었습니다. 결제를 "커밋하기 전에 하나"로 재설정 (-소프트 NOT-단단하지 않으므로 실제로 손실되지 않음)하면 커밋되지 않은 두 가지 변경 사항이 있습니다.
** 편집 * *
나는 그것이 실제로 훨씬 쉽다는 것을 깨달았습니다. 3 단계를 완전히 건너 뛸 수 있으므로 ...
(현재 변경 사항을 커미트하고 숨김 변경 사항을 제거하고 커밋을 재설정하여 커미트되지 않은 상태에서 두 가지 변경 사항 세트를 결합하십시오.)
Mathias Leppich의 솔루션 이 훌륭하게 작동 한다는 것을 알았 으므로 글로벌 .gitconfig에 별칭을 추가했습니다.
[alias]
apply-stash-to-dirty-working-tree = !git stash show -p | git apply && git stash drop
이제 그냥 입력 할 수 있습니다
git apply-stash-to-dirty-working-tree
그것은 나를 위해 잘 작동합니다.
(여러분의 마일리지는이 긴 별칭 이름에 따라 다를 수 있습니다. 그러나 나는 bash 완료와 관련하여 자세한 정보를 원합니다.)
나는 이것들의 대부분을 작동시킬 수 없었다. 어떤 이유로 든 항상 파일에 로컬 변경 사항이 있다고 생각합니다. 나는 은닉을 적용 할 수 없습니다, 패치가 적용되지 않습니다 checkout
및 reset --hard
실패합니다. 무엇 결국 일을하는 것은 분기로 숨김을 저장했다 git stash branch tempbranchname
, 다음 일반 지점 병합을 수행 : git checkout master
와 git merge tempbranchname
. 에서 http://git-scm.com/book/en/Git-Tools-Stashing :
숨김 변경 사항을 다시 테스트하는 더 쉬운 방법을 원하면 git stash 브랜치를 실행하여 새 분기를 작성하고 작업을 숨김 상태로 만들 었는지 확인하고 작업을 다시 적용한 다음 삭제합니다. 그것이 성공적으로 적용되면 숨어
git stash show -p | git apply
와 다른 가요git stash apply
?