힘내 숨김 : "더러운 작업 트리에는 적용 할 수 없습니다. 변경 사항을 준비하십시오"
이전에 저장 한 변경 사항을 적용 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 개발자는이 옵션을 이미 사용합시다!)
그러나 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 완료와 관련하여 자세한 정보가 필요합니다.)
git add
변경 사항을 준비하여 트리를 정리 하여 "더티"트리에 숨김을 적용 할 수 있습니다 . 그런 다음 git stash pop
숨김 변경 사항을 문제없이 적용하고 적용 할 수 있습니다 .
You have files that have been modified but not committed. Either:
git reset --hard HEAD (to bring everything back to HEAD)
or, if you want to save your changes:
git checkout -b new_branch
git add ...
git commit
git checkout -b old_branch
git stash pop
I had the same problem but git had zero changed files. Turns out I had a index.lock file that was lying around. Deleting it solved the problem.
I was unable to get most of these to work; for some reason it always thinks I have local changes to a file. I can't apply a stash, patches won't apply, checkout
and reset --hard
fail. What finally worked was saving the stash as a branch with git stash branch tempbranchname
, and then doing a normal branch merge: git checkout master
and git merge tempbranchname
. From http://git-scm.com/book/en/Git-Tools-Stashing :
If you want an easier way to test the stashed changes again, you can run git stash branch, which creates a new branch for you, checks out the commit you were on when you stashed your work, reapplies your work there, and then drops the stash if it applies successfully
'development' 카테고리의 다른 글
Ruby에서 보호 및 개인 메소드를 단위 테스트하는 가장 좋은 방법은 무엇입니까? (0) | 2020.06.30 |
---|---|
"캐시의 키 저장?" (0) | 2020.06.30 |
왜 ~ True가 -2가됩니까? (0) | 2020.06.30 |
Rails 3 : 랜덤 레코드 받기 (0) | 2020.06.30 |
Selenium Webdriver 2 Python에서 현재 URL을 어떻게 얻습니까? (0) | 2020.06.30 |