캐시되지 않은 Gitstash: 단계별 변경 사항을 모두 정리하는 방법은 무엇입니까?
git로 버전이 지정된 프로젝트에서 두 집합의 변경이 이루어진다고 가정합니다.한 세트는 준비되고 다른 세트는 준비되지 않습니다.
이 상태(커밋하기 전)에서 프로젝트를 실행하여 단계별 변경 사항을 다시 확인하고 싶습니다.단계별 변경 사항을 모두 삭제하고 단계별 변경 사항만 유지하는 간단한 방법은 무엇입니까?따라서 프로젝트에서 사라지지만 추가 작업을 위해 어딘가에 저장하려면 단계별 변경 사항이 필요합니다.
이것은 매우 흡사하게 들립니다.git stash
지휘권그렇지만git stash
제 프로젝트에서 미단계적 및 단계적 변경을 모두 제거할 수 있습니다.그리고 나는 그와 같은 것을 찾을 수 없습니다.git stash uncached
.
2 업데이트 2:
사람들이 왜 이 답변에 대해 불평하는지 잘 모르겠습니다. 저와 완벽하게 작동하는 것 같습니다. 추출되지 않은 파일에 대해 추가할 수 있습니다.-u
는 전체명다같습다니과음은령다가 됩니다.git stash --keep-index -u
그리고 여기에 다음의 토막글이 있습니다.git-stash
도와 주세요.
--keep-index 옵션을 사용하는 경우 이미 인덱스에 추가된 모든 변경사항은 그대로 유지됩니다.
--include-untracked 옵션을 사용하면 추적되지 않은 모든 파일도 저장된 다음 git clean으로 정리되어 작업 디렉토리가 매우 깨끗한 상태로 유지됩니다.대신 --all 옵션을 사용하면 추적되지 않은 파일 외에도 무시된 파일이 저장되고 치료됩니다.
그리고 이것은 어떻게 보이는지에 대한 gif입니다.
업데이트:
오늘(2020년 1월 31일) Git 버전과 비교하여 답변을 다시 테스트했습니다.2.24.0
그리고 저는 여전히 그것이 옳다고 믿습니다. 위에 추적되지 않은 파일에 대한 작은 메모를 추가했습니다.만약 당신이 그것이 작동하지 않는다고 생각한다면 당신의 Git 버전도 언급해주세요.
이전 답변:
에 약에만.--keep-index
옵션을 사용하면 인덱스에 이미 추가된 모든 변경 사항은 그대로 유지됩니다.
git stash --keep-index
의 설명서에서:
부분 커밋 테스트
사용할 수 있습니다.
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'
그러나 준비된 변경 내용만 시각적으로 확인하려는 경우 다음을 시도할 수 있습니다.
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 restore .
또는git checkout -- .
에 git apply -R unstaged.diff
.
작업 중...
git apply unstaged.diff
rm unstaged.diff
지금까지의 다양한 답변에는 나름대로의 복잡성/한계가 있는 것처럼 보이기 때문에, 저는 제가 개인적으로 필요로 했던 모든 특정한 에지 사례를 다루는 몇 가지 대안을 더 제공하고자 했습니다.
tl;dr
준비된(삭제되지 않은) 파일 나열:
git diff --staged --diff-filter=d --name-only
삭제되지 않은(삭제되지 않은) 파일 나열:
git diff --diff-filter=d --name-only
단계별/추적되지 않은 파일 나열:
git ls-files --modified --others --exclude-standard
스테이징된 파일만 저장(원래 이 StackOverflow 응답에서 나왔으나 약간 조정됨):
git stash push --include-untracked -- $(git diff --staged --diff-filter=d --name-only)
단계화되지 않은(추적되지 않은) 파일만 저장:
git stash push --keep-index -- $(git diff --diff-filter=d --name-only)
스테이징되지 않은 파일 및 추적되지 않은 파일 저장:
git stash push --keep-index --include-untracked -- $(git ls-files --modified --others --exclude-standard)
준비된/준비되지 않은 파일을 저장하는 동시에 인덱스에도 준비된 파일을 보관합니다.
git stash push --keep-index
준비된 파일/준비되지 않은 파일/추적되지 않은 파일을 저장하는 동시에 인덱스에도 준비된 파일을 보관합니다.
git stash push --include-untracked --keep-index
전체 설명
git stash push
를 제공하고 일치하는 파일만 저장할 수 있습니다.
git stash push -- <pathspec>
로컬 수정사항을 새 저장 항목에 저장한 후 HEAD(작업 트리 및 인덱스)로 롤백합니다.부품은 선택 사항이며 숨김 상태와 함께 설명을 제공합니다.
이 옵션은 다음 기간에만 유효합니다.
push
지휘권새 스택 항목은 경로 규격과 일치하는 파일에 대해서만 수정된 상태를 기록합니다.그런 다음 인덱스 항목과 작업 트리 파일은 이러한 파일에 대해서만 HEAD의 상태로 롤백되어 경로 규격과 일치하지 않는 파일은 그대로 유지됩니다.
-u
,--include-untracked
,--no-include-untracked
다음과 함께 사용할 수 있습니다.
push
그리고.save
되지 않은 모든 된 후 됩니다.git clean
.
git diff
에서는 현재 준비되지 않은 파일을 다음과 같이 나열할 수 있습니다.
git diff --name-only
git diff [<options>] [--] [<path>…]
이 양식은 인덱스(다음 커밋 준비 영역)와 관련하여 변경한 내용을 확인합니다.
변경된 파일의 이름만 표시합니다.
--diff-filter=\[(A|C|D|M|R|T|U|X|B)…\[*\]\]
합니다(가된파선택추만일(
A
됨, 복됨사()C
), 삭제됨,D
수정됨(M
, , , 로 이름이 바뀌었습니다.R
일반 파일, 링크,합니다. ( ), 유예형 (을 : 일파일링, 볼등모크, 듈하위다)T
)는병합되지 않은 상태()입니다.U
), 알수 없음(), 알 수 없음()입니다X
), 깨진 (), 또는 짝이 경우B
의할 수 필터 문자(없음 포함)의 모든 조합을 사용할 수 있습니다.또한 이러한 대문자는 소문자로 구분하여 제외할 수 있습니다.예.
--diff-filter=ad
추가 및 삭제된 경로를 제외합니다.
git ls-files
파일과 --others
추적되지 않은() 파일을 모두 나열할 수 있습니다.
git ls-files --modified --others --exclude-standard
git-ls-files
인덱스 및 작업 트리의 파일에 대한 정보 표시
출력에 수정된 파일 표시
출력에 다른(즉, 추적되지 않은) 파일 표시
표준 Git 제외 항목인 .git/info/exclude, .gitignore를 각 디렉터리에 추가하고 사용자의 전역 제외 파일을 추가합니다.
Git 2.35(Q1 2022) 기준으로 단계별 변경 사항을 저장할 수 있습니다.git stash --staged
.
따라서 단계별(및 추적되지 않은) 변경사항을 저장하려면 다음을 수행합니다.
git stash --staged # stashes staged, leaving unstaged
git stash -u # stashes unstaged & untracked
git stash pop "stash@{1}" # pops staged back (but they're now unstaged)
git add -A # restages the previously staged changes
그러나 단계별 및 단계별 변경사항이 동일한 라인에 영향을 미치는 경우에는 실패합니다.
git stash --staged
이 상황에서 단계적 변경사항을 저장함으로써 "실패"하지만 단계적 변경사항과 단계적 변경사항을 모두 남깁니다.
이 경우 아래 방법(을 사용)이 더 나을 수 있습니다.
이에 대해 agit 별칭을 추가하려면 이 별칭을 다음에 추가합니다..gitconfig
:
[alias]
stash-unstaged = "!cd "${GIT_PREFIX:-.}"; f() { \
git stash --quiet --staged; \
git stash -u \"$@\"; \
git stash pop --quiet \"stash@{1}\"; \
git add -A; \
}; f"
용도:
git stash-unstaged -m "Stash Message"
Git 버전이 <2.35인 경우
다음을 이용하여 스테이징되지 않은 상태(추적되지 않은 상태)를 저장할 수 있습니다.git commit
준비된 변경사항과 준비되지 않은 변경사항을 구분합니다.
git commit -m "TEMP" # commits staged, leaving unstaged
git stash -u # stashes unstaged & untracked
git reset --soft HEAD^ # undo commit, bringing staged back
이전 방법(사용)과 달리 이 방법은 단계별 및 단계별 변경사항이 동일한 선에 영향을 주더라도 계속 작동합니다.
따라서 저장소를 열 때 병합 충돌을 해결해야 할 수도 있습니다.
참고로 단계별 변경사항을 저장하려면 먼저 단계별 변경사항을 저장합니다.
# Stash unstaged as shown previously
git commit -m "TEMP"
git stash -u
git reset --soft HEAD^
git stash -u # stashes remaining staged
git stash pop "stash@{1}" # pops unstaged back
다음 2개의 별칭:
[alias]
stash-unstaged = "!cd "${GIT_PREFIX:-.}"; f() { \
git commit --quiet -m \"TEMP\"; \
git stash -u \"$@\"; \
git reset --quiet --soft HEAD^ \
}; f"
stash-staged = "!cd "${GIT_PREFIX:-.}"; f() { \
git stash-unstaged --quiet; \
git stash -u \"$@\"; \
git stash pop --quiet \"stash@{1}\"; \
}; f"
Git: 스테이징되지 않은 변경 내용 저장
이렇게 하면 추가하지 않은 모든 수정 사항이 저장됩니다.
git stash -k
생성된추가되지 않은) 가 사용하지 않는 한 .-u
스위치를 켜다
git stash -k -u
또한 나중에 stash pop을 실행할 때 작업 디렉터리가 깨끗해야 합니다(즉, 모든 변경 사항을 추가해야 함).
http://makandracards.com/makandra/853-git-stash-unstaged-changes
이를 매우 단순하게 만드는 방법은 다음과 같습니다.
- 합니다.
.zshrc
또는.bashrc
또는.bash_profile
- 상황에 마다, 이제상, 황에처하면요, 입세하력그냥런을 하세요.
gss
의 스테이시를 될 입니다 - 사항이 이고 또 스테이시는 인 변경 스테이시입니다. 변 개 개 개 사 경 있 의 의 1 다 2 니 있 습 이 택 모 스 있 사 다 변 항 경 는 만 른 준 비 된 항 이 는 와 ▁with 든 ▁and 개 다 모 ▁- ▁st 있
이제 단계별 변경사항을 적용하여 해당 변경사항이 제대로 작동하는지 확인하고 필요에 따라 커밋할 수 있습니다.그런 다음 나중에 'all WIP' 저장을 적용하여 단계별 변경 사항을 가져와 사용해 볼 수도 있습니다.
alias gsts='git stash save'
alias gsv="git stash save --keep-index"
# How to Git Stash preserving staged/unstaged situation.
# 1. gsv will stash all and reset (remove) the unstaged, leaving only staged in staged state.
# 2. gsts will make a stash with your "good" (staged) files
alias gss='gsv all WIP && gsts staged WIP'
언급URL : https://stackoverflow.com/questions/20028507/git-stash-uncached-how-to-put-away-all-unstaged-changes
'programing' 카테고리의 다른 글
크로스 컴파일 시 외부 라이브러리를 사용하는 방법은 무엇입니까? (0) | 2023.07.22 |
---|---|
리눅스 커널에서 자는 방법? (0) | 2023.07.22 |
git 저장소에서 .pyc 파일 무시 (0) | 2023.07.17 |
AbstractDynamicObject$CustomMessageMissingMethodException 오류가 발생하는 이유는 무엇입니까? (0) | 2023.07.17 |
1D Numpy 배열에서 Numpy를 사용하여 로컬 최대값/minima 찾기 (0) | 2023.07.17 |