나는 변화를 막았다. 이제 숨김 파일에서 일부 파일 만 해제하고 싶습니다. 어떻게해야합니까?
나는 변화를 막았다. 이제 숨김 파일에서 일부 파일 만 해제하고 싶습니다. 어떻게해야합니까?
답변:
아래 에서 언급 하고 " git stash에서 단일 파일 (또는 파일의 변경 사항)을 추출하는 방법은 무엇입니까? "에 자세히 설명되어있는 것처럼 사용 git checkout
하거나 git show
특정 파일을 복원 할 수 있습니다 .
git checkout stash@{0} -- <filename>
즉 않습니다 덮어 쓰기 filename
: 메이크업 확실히 당신은 로컬 수정을하지 않았거나 병합 할 수 있습니다 대신 은닉 파일을 .
( Jaime M.의 설명 에 따르면 특수 문자를 이스케이프 해야하는 tcsh와 같은 특정 쉘의 경우 구문은 다음과 같습니다. )git checkout 'stash@{0}' -- <filename>
또는 다른 파일 이름으로 저장하려면 :
git show stash@{0}:<full filename> > <newfile>
(여기서는
<full filename>
프로젝트의 최상위 디렉토리에 상대적인 파일의 전체 경로 이름입니다 (생각 :)stash@{0}
.
해당 파일에서 적용 할 변경 사항을 수동으로 선택하려는 경우 :
git difftool stash@{0}..HEAD -- <filename>
"
git checkout stash@{0} -- <filename>
"는 숨김이 수행 된 시점의 파일 버전을 복원하는 것처럼 보입니다. 해당 파일에 대한 숨김 변경 사항은 적용 되지 않습니다 .
후자를하려면 :
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(같은 주석 에 의해 peterflynn , 당신은해야 할 수도 있습니다 | git apply -p1
(하나를 제거, 어떤 경우에는 p1
) 전통은 diff 경로에서 선도적 인 슬래시)
주석이 달린 "unstash"( git stash pop
) :
git add
).git stash --keep-index
마지막 요점은 다른 파일을 숨기면서 파일을 유지할 수있게하는 것입니다.
" 변경된 여러 파일 중 하나의 파일 만 숨기는 방법 "에 설명되어 있습니다.
git stash pop
파일 충돌로 인해 작동하지 않으면 작동하지 않습니다 . Balamurugan A의 대답은 그 경우 나를 위해 속임수를 사용했습니다.
unstash
수단을 pop
아마 것 대부분의 경우,이 부분적으로 만 질문에 대한 답을 나에게 보인다. 그런 다음 나머지 변경 사항을 표시 할 때 나중에 충돌 및 / 또는 혼란을 피하기 위해 숨김에서 선택적으로 적용된 조각을 어떻게 제거합니까?
git checkout stash@{N} <File(s)/Folder(s) path>
예 : 마지막 숨김에서 ./test.c 파일 및 ./include 폴더 만 복원하려면
git checkout stash@{0} ./test.c ./include
-a
, 은신처를 만드는 동안 깃발을 사용했습니다 .
VonC의 대답은 아마도 당신이 원하는 것이라고 생각하지만 선택적인 "git apply"를 수행하는 방법이 있습니다.
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
아무것도 신경 쓰지 않는 파일을 복사하고 싶기 때문에 저에게 효과적입니다 .
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
-PS가 중괄호를 특수하게 해석하지 않으려면 백틱이 필요하며 PS 연산자는 기본적으로 UTF-16 (실제 UCS-2)으로 설정 되어 있기 때문에sc
필요 합니다. @Balamurugan A의 대답은 이러한 문제로 고통받지 않습니다. >
먼저 모든 스 태쉬를 나열하십시오.
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
그런 다음 숨김에있는 파일을 표시하십시오 (숨김 1을 선택하십시오).
git stash show 1 --name-only
//Hint: you can also write
//git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
그런 다음 원하는 파일을 적용하십시오.
git checkout stash@{1} -- <filename>
또는 전체 폴더 :
git checkout stash@{1} /errors
없이도 작동 --
하지만 사용하는 것이 좋습니다. 이 게시물을 참조하십시오 .
옵션 해석을 중지하고 다음의 모든 인수를 문자 그대로 처리하기위한 신호로 이중 하이픈을 인식하는 것도 일반적입니다.
git stash pop
추적되지 않은 파일에 오류 가 발생하는 문제에 직면했습니다 . 감사합니다.
당신이 git stash pop
(충돌하지 않고) 적용되면 숨김을 제거합니다. 그러나 git stash apply
패치를 숨김 목록에서 제거하지 않고 적용합니다. 그런 다음 원치 않는 변경 사항을 되돌릴 수 있습니다.git checkout -- files...
git stash pop
수동으로 수정해야하며 숨김이 제거되지 않습니다.
한 가지 더 방법 :
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
또는 것은 show
맹목적으로 단지 변경 사항을 적용하지 않고 파일을 덮어 쓰게됩니다. "하나 더 방법"은 과소 평가입니다.
path/to/file2
작업 공간의 동일한 파일과 비교하여 원하는 것을 얻지 못했습니다 . 두 번째 길을 떠나면 나에게 잘 작동합니다. - -R
옵션을 사용하여 오류 메시지가 나타납니다 ( "패치를 역으로 적용", 숨김 버전을 패치하려고 합니까 ?!). 그래서 내 작업 버전은 다음과 같습니다 git diff stash@{N}^! -- path/to/file | git apply -
.
...| git apply -3 -