이전에 저장 한 변경 사항을 적용 git stash pop
하고 메시지를 받으려고합니다.
Cannot apply to a dirty working tree, please stage your changes
그것을 다루는 방법에 대한 제안?
답변
더티 작업 복사본에 숨김 변경 사항을 적용해야하는 경우 (예 : 숨김에서 둘 이상의 변경 세트를 팝업) 다음을 사용합니다.
$ git stash show -p | git apply -3 && git stash drop
기본적으로
- 패치를 만듭니다
- 적용 명령에 파이프
- 충돌이있는 경우 3 방향 병합을 통해 해결해야합니다.
- 적용 (또는 병합)에 성공하면 방금 적용된 숨김 항목이 삭제됩니다 …
위의 한 줄짜리처럼 정확하게 작동 해야하는 -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 add -A
git stash apply
그런 다음 (선택 사항) :
git reset
답변
패치 파일로 원하는 숨김을 내보내고 수동으로 적용하여 현재 변경 사항을 숨기지 않고도이 작업을 수행 할 수 있습니다.
예를 들어, 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 명령 만 사용하여 동일한 작업을 수행하려면 다음을 수행하십시오.
- git commit -a -m “Fixme”
- 자식 숨김 팝
- 자식 커밋 -a –amend
- git reset HEAD ~
즉, 현재 변경 사항을 커밋하십시오 (우리는 절대로 밀어 넣지 않을 것입니다). 이제 작업 공간이 깨끗해졌습니다. 이제 이전 변경 사항에 대한 수정 사항으로 숨김 변경 사항을 적용하십시오. 이제 한 번의 커밋 ( “Fixme”)으로 두 변경 세트가 결합되었습니다. 결제를 “커밋하기 전에 하나”로 재설정 (-소프트 NOT-단단하지 않으므로 실제로 손실되지 않음)하면 커밋되지 않은 두 가지 변경 사항이 있습니다.
** 편집 * *
나는 그것이 실제로 훨씬 쉽다는 것을 깨달았습니다. 3 단계를 완전히 건너 뛸 수 있으므로 …
- git commit -a -m “Fixme”
- 자식 숨김 팝
- git reset HEAD ~
(현재 변경 사항을 커미트하고 숨김 변경 사항을 제거하고 커밋을 재설정하여 커미트되지 않은 상태에서 두 가지 변경 사항 세트를 결합하십시오.)
답변
오늘 내가했던 것처럼 당신이 이런 상황에 처해 있다면이 답변들 중 어느 것도 실제로 효과가 없습니다. git reset --hard
내가 한 사람 수에 관계없이 아무 데나 데려갔습니다. 내 대답 (어떻게 든 공식적이 아니었다) :
- 숨김의 해시 사용 파악
git reflog --all
- 관심있는 지점과 해시를 병합
답변
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 완료와 관련하여 자세한 정보를 원합니다.)