Git Stash Uncached : 모든 미 단계 변경 사항을 삭제하는 방법은 무엇입니까? 무엇입니까? 따라서 프로젝트에서 사라지고 추가 작업을

git에 의해 버전이 지정된 프로젝트에서 두 가지 변경 사항이 있다고 가정합니다. 한 세트는 스테이징되고 다른 세트는 그렇지 않습니다.

이 상태 (커밋 전)에서 프로젝트를 실행하여 단계적 변경을 다시 확인하고 싶습니다. 모든 단계되지 않은 변경 사항을 제거하고 단계적으로 만 유지하는 간단한 방법은 무엇입니까? 따라서 프로젝트에서 사라지고 추가 작업을 위해 어딘가에 저장하려면 무단계 변경 사항이 필요합니다.

이것은 git stash명령 과 매우 흡사하게 들립니다 . 그러나 git stash내 프로젝트에서 무단계 및 단계적 변경을 모두 제거합니다. 그리고 나는 같은 것을 찾을 수 없습니다 git stash uncached.



답변

업데이트 2 :
사람들 이이 답변에 대해 불평하는 이유를 잘 모르겠습니다. 완벽하게 작동하는 것 같습니다. 추출되지 않은 파일의 경우 -u플래그를 추가 할 수 있습니다

전체 명령은 git stash --keep-index -u

다음 git-stash은 도움말 의 일부입니다.

–keep-index 옵션을 사용하면 이미 인덱스에 추가 된 모든 변경 사항이 그대로 유지됩니다.

–include-untracked 옵션을 사용하면 추적되지 않은 모든 파일도 숨겨지고 git clean으로 정리되어 작업 디렉토리가 매우 깨끗한 상태로 유지됩니다. 대신 –all 옵션을 사용하면 추적되지 않은 파일과 함께 무시 된 파일이 숨겨지고 정리됩니다.

그리고 이것은 어떻게 보이는지에 대한 gif입니다.

최신 정보:


이것이 선택된 답변 임에도 불구하고 [아래 답변] (https://stackoverflow.com/a/34681302/292408)이 올바른 답변이라고 많은 사람들이 지적 했으므로 확인하는 것이 좋습니다.

나는 오늘 (31/1/2020) 내 대답을 git version에 대해 다시 테스트했으며 2.24.0여전히 옳다고 생각하며 추적되지 않은 파일에 대한 작은 메모를 위에 추가했습니다. 작동하지 않는다고 생각되면 git 버전도 언급하십시오.

올드 답 :
경우 --keep-index옵션을 사용, 이미 인덱스에 추가 된 모든 변경 사항이 그대로 남아 있습니다 :

git stash --keep-index

문서에서git-stash :

부분 커밋 테스트

git stash save --keep-index작업 트리의 변경 사항에서 두 개 이상의 커밋을 수행하고 커밋하기 전에 각 변경 사항을 테스트하려는 경우 사용할 수 있습니다 .

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

그러나 단계적 변경 사항 만 시각적으로 확인하려는 경우 다음을 시도 할 수 있습니다 difftool.

git difftool --cached

답변

받아 들여진 대답은 또한 몇몇 사람들이 지적했듯이 단계적 변화를 숨 깁니다. 다음은 숨김에 단계적 변경없이이를 수행하는 방법입니다.

아이디어는 단계적 변경 사항을 임시 커밋 한 다음 단계되지 않은 변경 사항을 숨긴 다음 임시 커밋을 해제하는 것입니다.

# temp commit of your staged changes:
$ git commit --message "WIP"

# -u option so you also stash untracked files
$ git stash -u

# now un-commit your WIP commit:
$ git reset --soft HEAD^

이 시점에서 준비되지 않은 변경 사항은 숨겨지고 작업 복사본에는 준비된 변경 사항 만 표시됩니다.


답변

나는 단계되지 않은 변경 사항 만 진정으로 숨겨 놓은 무언가가 필요했기 때문에 표시된 답변이 나를 위해 작동하지 않는다는 것을 알았습니다. 표시된 대답 git stash --keep-index은 단계적 변경 사항과 단계적 변경 사항이 모두 숨겨져 있습니다. 이 --keep-index부분은 작업 복사본에서도 인덱스를 그대로 유지합니다. 그것은 OP에서 작동하지만 실제로 대답을 원했던 것과 약간 다른 질문을했기 때문입니다.

준비되지 않은 변경 사항을 숨길 수있는 유일한 방법은 숨김을 전혀 사용하지 않는 것입니다.

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- .대신 apply -R.

작업 작업 작업 …

git apply unstaged.diff
rm unstaged.diff

답변

Git : 준비되지 않은 변경 사항 보관

그러면 git add하지 않은 모든 수정 사항이 숨겨집니다.

git stash -k

새로 생성 된 (추가되지 않은) 파일은 -u스위치를 사용하지 않는 한 작업 디렉토리에 남아 있습니다.

git stash -k -u

또한 나중에 git stash pop을 사용할 때 작업 디렉토리가 깨끗해야합니다 (즉 모든 변경 사항이 추가되어야 함).

http://makandracards.com/makandra/853-git-stash-unstaged-changes