내 깃 저장소에 작은 패치를 저장했다. '깃 저장소 적용'을 사용하여 작업 복사본에 적용했다. 이제 패치를 반대로 적용하여 변경 사항을 되돌리고 싶습니다 (git revert
가 수행하지만 저장소에 대해 수행하는 것과 비슷함).
이 작업을 수행하는 방법을 아는 사람이 있습니까?
설명: 제 작업 복사본에는 다른 변경 사항이 있습니다. 제 특별한 경우를 설명하기는 어렵지만 스태시에있는 디버깅 또는 실험 코드를 상상할 수 있습니다. 이제 작업 복사본에 다른 변경 사항과 함께 혼합되어 있으며 숨김의 변경 사항을 적용했을 때와 적용하지 않았을 때의 효과를 보고 싶습니다.
현재 스테이시가 이 기능을 지원하지 않는 것 같지만 git stash apply --reverse
가 있으면 좋을 것 같습니다.
http://git-scm.com/docs/git-stash">'git-stash manpage'에 따르면, '스태시는 트리에 작업 디렉토리의 상태를 기록하는 커밋으로 표현되며, 첫 번째 부모는 스태시가 생성될 때 HEAD
에 있는 커밋이고, git stash show -p
는 스태시에 저장된 변경 사항을 스태시 상태와 원래 부모 사이의 차이로 알려준다.
다른 변경 사항을 그대로 유지하려면 다음과 같이 git stash show -p | patch --reverse
를 사용하세요:
$ git init
Initialized empty Git repository in /tmp/repo/.git/
$ echo Hello, world >messages
$ git add messages
$ git commit -am 'Initial commit'
[master (root-commit)]: created 1ff2478: "Initial commit"
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 messages
$ echo Hello again >>messages
$ git stash
$ git status
# On branch master
nothing to commit (working directory clean)
$ git stash apply
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: messages
#
no changes added to commit (use "git add" and/or "git commit -a")
$ echo Howdy all >>messages
$ git diff
diff --git a/messages b/messages
index a5c1966..eade523 100644
--- a/messages
+++ b/messages
@@ -1 +1,3 @@
Hello, world
+Hello again
+Howdy all
$ git stash show -p | patch --reverse
patching file messages
Hunk #1 succeeded at 1 with fuzz 1.
$ git diff
diff --git a/messages b/messages
index a5c1966..364fc91 100644
--- a/messages
+++ b/messages
@@ -1 +1,2 @@
Hello, world
+Howdy all
수정:
이 문제를 약간 개선한 방법은 패치 대신 git apply
를 사용하는 것입니다:
git stash show -p | git apply --reverse
또는 git apply -R
을 git apply --reverse
의 단축어로 사용할 수도 있습니다.
저는 최근에 이 방법이 정말 편리하다는 것을 알게 되었습니다...
git stash
[save]
는 작업 디렉터리 상태와 인덱스 상태를 가져와서 저장하고, 인덱스와 작업 영역을 HEAD
버전으로 설정합니다.
'git stash apply
'는 변경 사항을 다시 가져오므로 'git reset --hard
'는 다시 제거합니다.
'git stash pop'은 해당 변경 사항을 다시 가져오고 가장 위에 저장된 변경 사항을 제거하므로 이 경우 git stash [save]
는 이전(팝 전) 상태로 돌아갑니다.
붙여넣습니다 직접판매용 잘라냅니다 n 의 git 맨페이지
$ git stash show -p stash@{0} | git apply -R
지정하지 않으면, Git 는 가장 최근에 다시 숨기기 숨기기:
$ git stash show -p | git apply -R
깃 (git) 앨리어스를 추가하기에서는 데이터베이스에구성원을 비밀창고 우나플리 명령을 효과적으로 만들 수 있습니다. 예를 들면 다음과 같습니다.
$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work
$ git stash-unapply
이것은 오래되었지만 문제를 올바르게 해석하면 간단한 해결책을 찾을 수 있습니다:
'깃 저장소 [저장]`는 현재 변경 사항을 저장하고 현재 브랜치를 '깨끗한 상태'로 설정합니다;
'깃 스태시 리스트'는 다음과 같은 결과를 보여준다: stash@{0}: 개발 중: 저장된 테스트 내용
과 같이 출력된다.
git apply stash@{0}
는 현재 브랜치를 stash [저장]
이전으로 설정한다.
git checkout .
은 현재 브랜치를 stash [저장] 이후
로 설정한다.
저장소에 저장된 코드는 손실되지 않으며, git apply stash@{0}
로 다시 찾을 수 있습니다.
어쨌든, 이 방법은 저에게 효과적이었습니다!
베이컨 외에 오토메이티드 @Greg 대비하여, 이진 파일, 또는 그 부분을 사용하여 추가된 인덱스화할 비밀창고
git stash show -p | git apply --reverse
발생할 수 있습니다
error: cannot apply binary patch to '<YOUR_NEW_FILE>' without full index line
error: <YOUR_NEW_FILE>: patch does not apply
이 문제를 해결할 수 있지만, t # 39 죄송합니다. haven& 이진 추가 '' 왜 아직 깨달았습니다.
git stash show -p --binary | git apply --reverse
이것은 또한 위와 같은 답을 찾고 있지만 자도으로 깃 (git) 을 기반으로 바뀔 때 새로운 메시지를 숨겨 놨다 저장됩니다 비밀창고 비밀창고 수 있습니다. 나는 몇 가지 기능을 기록되었으므로 내주었다.
apply(){
if [ "$1" ]; then
git stash apply `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"`
fi
}
remove(){
if [ "$1" ]; then
git stash show -p `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"` | git apply -R
git status
fi
}