나는이 질문에 대한 응답을 찾지 못했지만 놀랍다. 기본적으로 나는 여러 파일들을 숨긴다 (나는 git 확장을 통해 그것을 탐색 할 수있다). 내용을 살펴보면, 적용하기 전에 일부 파일을 삭제하고 싶습니다. 가능합니까? 내가 생각할 수있는힘내 : 적용하지 않고 은닉 파일에 넣기
유일한 해결 방법은 다음과 같습니다 다시
- 체크 아웃 새로운 지점
- 체크 아웃에 숨겨 놓은이 대상 파일
- 숨겨 놓은
- 분기
에게 삭제 더 좋은 점이 있나요?
감사합니다.
나는이 질문에 대한 응답을 찾지 못했지만 놀랍다. 기본적으로 나는 여러 파일들을 숨긴다 (나는 git 확장을 통해 그것을 탐색 할 수있다). 내용을 살펴보면, 적용하기 전에 일부 파일을 삭제하고 싶습니다. 가능합니까? 내가 생각할 수있는힘내 : 적용하지 않고 은닉 파일에 넣기
유일한 해결 방법은 다음과 같습니다 다시
에게 삭제 더 좋은 점이 있나요?
감사합니다.
예 더 좋은 방법이 있습니다. 모든
첫째, 당신은 그럼 당신은 은닉 커밋의 내용을 확인하기 위해 아래 할 수
git stash list
로 숨겨 놓은 목록을 확인할 수 있습니다.
git stash show -p [email protected]{1}
그럼 당신은 당신이 직접 커밋 기준으로 [email protected]{0}
을 사용할 수 있습니다
git stash apply [email protected]{1}
를 사용하여 적용 할 수 있습니다.
git checkout [email protected]{0} -- file1 file2 file3
을하고 당신이 원하는 것을 유지하기 위해 수동은 diff를 검사 : 당신의 작업 트리가 깨끗하고 (더 수정 된 파일)가없는 경우
, 당신은 당신이 원하는 파일을 체크 아웃 할 수 있습니다. 당신이 git stash apply
의 동작에 가까운 무언가를 원하는 경우에
, 당신은 그것을 패치를 작성하고 적용 할 수 있습니다
git show -p [email protected]{0} -- file1 file2 file3 | git apply -
[email protected]{0}
에 수정 된 파일을 나열하려면 [편집] :
git diff --name-only [email protected]{0}^ [email protected]{0}
하나만 제외하고 모든 파일을 가져 오려면 :
git show -p [email protected]{0} -- $(git diff --name-only [email protected]{0}^ [email protected]{0} |\
grep -v "thefile")
git이 놀랍습니다. 이 기능은 훌륭하지만 스태시를 수정하지 않습니다. 하나의 파일을 제외한 모든 파일을 적용하려면 모든 파일을 나열해야합니다. 반대 명령이 있습니까? – clemlaflemme
'git show -p stash @ {0}을 (를) 만들 수 없습니다 - file1 file2 file3 | git apply - '작동하지 않으면'error : unrecognized input '이 발생합니다. git apply -' – clemlaflemme
"작동합니다":'git show -p ...> patch && git apply patch'가 작동한다는 것을 의미합니까? – LeGEC
이 질문의 까다로운 부분은 마치 숨겨진 꼬리표가 완성 될 때처럼 보이게하려는 것입니다. 이러한 명령이 제거
git stash pop
# maybe a 'git reset head' if the index was changed
git checkout -- file.with.unwanted.changes.in.stash
그러나 : git stash {pop|apply}
은 (때로는 인덱스) 작업 트리에 영향을 미치는 때문에, 선택적으로 숨겨 놓은에서 변경을 충분히 쉽게 (수 있도록 충분한 나는 처음에 문제를 생각하고 오버라고 생각) 완전히 은닉 물; 대조적으로 pop
대신에 git stash apply
이라고 말하면 줄 바꿈은 변경되지 않습니다.숨겨진 꼬리표가 선택한 변경 사항을 그대로 유지하려는 것처럼 들립니다 (다시 적용해야 할 경우를 대비하여).
은 (난 당신이 정반대 싶어 시간이있을 수 있습니다 번갈아 가정 - 이러한 변화는 적용되지 않았다 숨김에서 떠날를, 그래서 그들은 나중에 적용 할 수 있습니다.)
그래서 단계를 복용 뒤로 : 은닉을 수정하는 데 관련된 것은 무엇입니까?은닉은 실제로 2 ~ 3 개의 임시 커밋으로 구성됩니다. 특별 심판 stash
은 이러한 커밋을 가리키며 여러 개의 숨김의 "스택"은 reflog를 사용하여 유지됩니다 (해킹 비트 일 수 있지만 일반적으로 효과적입니다).
숨김을 수정하려면 (커밋이 변경 불가능하기 때문에) 새로운 커밋을 만들고 그에 따라 stash
ref 및 reflog를 재정렬해야합니다.
LeGEC이 언급 한 표기법이 작동하고 독서에 유연성을 더해 줄 수 있습니다. 그러나 reflog 사용이 비 숨겨진 참조와 동일하지 않기 때문에 에을 작성하는 방법을 고안하기 위해이 사실을 활용하면 예기치 않은 결과가 발생할 수 있습니다. 결과가 끔찍하거나 예측/통제가 불가능할 것이라고 말하는 것이 아닙니다. 하지만 결국에는 당신이 피하는 것보다 더 복잡한 것을 만들 것이라고 생각합니다.
실제 문서화 된 git-stash
부속 명령에 자신을 한정하면 숨김이 다소 적습니다. stash를 만들 때 patch
모드로 스택에 넣을 작업 변경 사항을 선택할 수 있지만 pop/apply에 해당하는 기능은 없습니다. 당신은 당신이 분할 할 깨끗한 작업 트리와 은닉이있는 경우
, 당신은 같은 일을 시도 할 수 : 그래도, 그 뭔가 몇 가지 변경 사항을 적용
, 그리고 숨김에서 그 같은 변경 사항을 유지
git stash pop
git stash -p
# select the "good" changes
git checkout -- .
git stash apply
몇 가지 변경 사항을 적용하고, 숨겨 놓은
git stash pop
git stash -p
# select the "unwanted" changes
에 남아있는 변경 사항을 유지
분할 두 부분으로 숨겨 놓은, 나중에 그들과 함께
git stash pop
git stash -p
# select the "good" changes
git stash
# now the "good" changes are [email protected]{1} and the "unwanted" are [email protected]{0}
부수적 인 기술적 인 참고 사항 : 각 숨김은 항상 최소한 두 개의 커밋 (인덱스 상태 + 작업 트리 상태)이고 때로는 인덱스, 작업 트리 및 "추가"입니다. "git stash -u"또는 "git stash -a"에 "additional"부분이 숨겨져 있으며 "untracked-sans-ignored"또는 "untracked-ignored-ignored"파일 만 포함됩니다 (색인 및 작업과는 다릅니다. -tree는 추적 된 모든 파일을 저장합니다. – torek
@torek - 허 ... 어떤 이유로 든 둘 중 하나가 비어 있으면 생략 될 것이라고 생각했습니다. 업데이트됩니다. 감사. –
감사 할 그러나 이것은 내 질문에 대답하지 않는 것을 결정한다. 나는 은닉의 내용을보고 그것을 전세계에 적용하는 방법을 알고있었습니다. 나는 숨은 꼬리표의 일부 적용을 찾고 있었는데, @LeGEC 대답 – clemlaflemme