보관함을 역적용하는 방법은 무엇인가요?

내 깃 저장소에 작은 패치를 저장했다. '깃 저장소 적용'을 사용하여 작업 복사본에 적용했다. 이제 패치를 반대로 적용하여 변경 사항을 되돌리고 싶습니다 (git revert가 수행하지만 저장소에 대해 수행하는 것과 비슷함).

이 작업을 수행하는 방법을 아는 사람이 있습니까?

설명: 제 작업 복사본에는 다른 변경 사항이 있습니다. 제 특별한 경우를 설명하기는 어렵지만 스태시에있는 디버깅 또는 실험 코드를 상상할 수 있습니다. 이제 작업 복사본에 다른 변경 사항과 함께 혼합되어 있으며 숨김의 변경 사항을 적용했을 때와 적용하지 않았을 때의 효과를 보고 싶습니다.

현재 스테이시가 이 기능을 지원하지 않는 것 같지만 git stash apply --reverse가 있으면 좋을 것 같습니다.

질문에 대한 의견 (2)
해결책

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 ..." to update what will be committed)
#   (use "git checkout -- ..." 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 -Rgit apply --reverse의 단축어로 사용할 수도 있습니다.

저는 최근에 이 방법이 정말 편리하다는 것을 알게 되었습니다...

해설 (8)

git stash[save]는 작업 디렉터리 상태와 인덱스 상태를 가져와서 저장하고, 인덱스와 작업 영역을 HEAD 버전으로 설정합니다.

'git stash apply'는 변경 사항을 다시 가져오므로 'git reset --hard'는 다시 제거합니다.

'git stash pop'은 해당 변경 사항을 다시 가져오고 가장 위에 저장된 변경 사항을 제거하므로 이 경우 git stash [save]는 이전(팝 전) 상태로 돌아갑니다.

해설 (0)
git checkout -f

비사양 커밋합니다 분리하십시오 변경 했다.

해설 (3)

붙여넣습니다 직접판매용 잘라냅니다 n 의 git 맨페이지

39 의 it& 확실히요 말로, 심지어 앨리어스를 포함되어 있습니다.

  • Un 적용 한 비밀창고 * 일부 览侩 荤례 시나리오용으로 숨겨진 적용하십시오 변경, 몇 가지 일을 할 수 있습니다 다음 사항을 un 적용하십시오 원래 있는 came from the 비밀창고. 깃 (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
해설 (1)

이것은 오래되었지만 문제를 올바르게 해석하면 간단한 해결책을 찾을 수 있습니다:

'깃 저장소 [저장]`는 현재 변경 사항을 저장하고 현재 브랜치를 '깨끗한 상태'로 설정합니다;

'깃 스태시 리스트'는 다음과 같은 결과를 보여준다: stash@{0}: 개발 중: 저장된 테스트 내용과 같이 출력된다.

git apply stash@{0}는 현재 브랜치를 stash [저장] 이전으로 설정한다.

git checkout .은 현재 브랜치를 stash [저장] 이후로 설정한다.

저장소에 저장된 코드는 손실되지 않으며, git apply stash@{0}로 다시 찾을 수 있습니다.

어쨌든, 이 방법은 저에게 효과적이었습니다!

해설 (1)

베이컨 외에 오토메이티드 @Greg 대비하여, 이진 파일, 또는 그 부분을 사용하여 추가된 인덱스화할 비밀창고

git stash show -p | git apply --reverse

발생할 수 있습니다

error: cannot apply binary patch to '' without full index line
error: : patch does not apply

이 문제를 해결할 수 있지만, t # 39 죄송합니다. haven& 이진 추가 '' 왜 아직 깨달았습니다.

 git stash show -p --binary | git apply --reverse
해설 (0)

이것은 또한 위와 같은 답을 찾고 있지만 자도으로 깃 (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
}
  1. 깃 (git) 만들기 (메시지), 저장, stash&quot &quot 내 이름이 비밀창고 '비밀창고' $
  2. 내 이름이 ',' 를 $ 적용하십시오 stash&quot 파프리 &quot.
  3. 내 이름이 '비밀창고' $ &quot 제거하시겠습니까 지루려면 stash";
해설 (0)

&gt. 어떻게 반전하려면 적용하십시오 비밀창고?

먼저, 가장 손쉬운 방법은 별도로 다른 사람들의 언급한 못하며창조된

git reset HEAD

모든 로컬 변경 후 체크아웃합니다

git checkout . 
해설 (0)