수색…
통사론
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
매개 변수
매개 변수 | 세부 |
---|---|
보여 주다 | 은신처에 기록 된 변경 사항을 은닉 상태와 원래의 부모 사이의 차이점으로 표시하십시오. <stash>가 주어지지 않을 때, 가장 최근의 것을 보여줍니다. |
명부 | 현재 가지고있는 은신처를 열거하십시오. 각 은닉은 이름과 함께 나열됩니다 (예 : stash @ {0}은 최신 숨김이고, {{1}은 이전 것임), 숨겨 졌을 때 현재 있었던 지점의 이름 및 짧은 숨김이 작성한 커밋에 대한 설명. |
팝 | 숨김 목록에서 숨겨진 상태를 하나 제거하고 현재 작업중인 트리 상태 위에 적용합니다. |
대다 | pop 과 같지만 숨김 목록에서 상태를 제거하지 마십시오. |
명확한 | 숨겨진 상태를 모두 제거하십시오. 이러한 상태는 가지 치기의 대상이되며 복구가 불가능할 수 있습니다. |
하락 | 숨김 목록에서 하나의 숨겨진 상태를 제거하십시오. <stash>가 주어지지 않으면, 가장 최근의 것을 제거한다. 즉 {@ 0}을 숨기고 그렇지 않으면 <stash>는 stash @ {<revision>} 형식의 유효한 숨김 로그 참조 여야합니다. |
몹시 떠들어 대다 | stash (일반 커밋 객체)를 만들고 ref 네임 스페이스의 아무 곳에도 저장하지 않고 객체 이름을 반환합니다. 이 기능은 스크립트에 유용합니다. 사용하려는 명령이 아닐 수도 있습니다. 위의 "저장"을 참조하십시오. |
저장 | git stash create를 통해 생성 된 stash ref를 저장하고 stash reflog를 업데이트합니다. 이 기능은 스크립트에 유용합니다. 사용하려는 명령이 아닐 수도 있습니다. 위의 "저장"을 참조하십시오. |
비고
Stashing을 사용하면 정보 손실없이 깨끗한 작업 디렉토리를 확보 할 수 있습니다. 그런 다음 다른 작업을 시작하거나 분기를 전환 할 수 있습니다.
Stashing이란 무엇입니까?
프로젝트에서 작업 할 때 master에 대해 버그가 발생하면 기능 분기가 변경 될 수 있습니다. 코드를 커밋 할 준비가되지 않았지만 변경 내용을 잃고 싶지는 않습니다. git stash
가 유용합니다.
분기에서 git status
를 실행하여 커밋되지 않은 변경 사항을 표시합니다.
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
그런 다음 git stash
를 실행하여 이러한 변경 사항을 스택에 저장합니다.
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
작업 디렉토리에 파일을 추가 한 경우이 파일도 숨길 수 있습니다. 당신은 그것들을 먼저 수행해야합니다.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
이제 작업 디렉토리에서 변경 한 내용을 제거합니다. git status
다시 실행하면 다음과 같이 볼 수 있습니다.
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
가장 마지막 숨은 git stash apply
하려면 git stash apply
실행하십시오. (덧붙여 git stash pop
변경된 마지막 git stash pop
적용 하고 제거 할 수 있습니다) :
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
그러나 stashing은 작업중인 지점을 기억하지 못합니다. 위의 예에서 사용자는 마스터 에 숨어있었습니다. 그들이 dev 브랜치, dev , 그리고 git stash apply
마지막 숨김이 dev 브랜치에 git stash apply
.
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
숨김 만들기
작업 디렉토리의 현재 상태와 색인 (스 테이 징 영역이라고도 함)을 숨김 스태프에 저장합니다.
git stash
추적되지 않은 모든 파일을 숨김에 포함 시키려면 --include-untracked
또는 -u
플래그를 사용하십시오.
git stash --include-untracked
숨긴 메시지에 메시지를 포함 시켜서 나중에 쉽게 식별 할 수있게하려면
git stash save "<whatever message>"
stash를 사용한 후 준비 영역을 현재 상태로 두려면 --keep-index
또는 -k
플래그를 사용하십시오.
git stash --keep-index
저장된 은닉 목록 표시
git stash list
이렇게하면 스택의 모든 숨김이 역순으로 나열됩니다.
다음과 같은 목록을 얻을 것입니다 :
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
특정 stash를 이름으로 참조 할 수 있습니다 (예 : stash@{1}
.
은닉 표시
마지막 은신처에 저장된 변경 사항을 표시합니다.
git stash show
또는 특정 숨 고침
git stash show stash@{n}
특정 숨은 숨김을 위해 저장된 변경 내용을 표시하려면
git stash show -p stash@{n}
숨김 제거
모든 숨김을 제거하십시오.
git stash clear
마지막 숨김을 제거합니다.
git stash drop
또는 특정 숨 고침
git stash drop stash@{n}
은닉을 적용하고 제거하십시오.
마지막 숨김을 적용하고 스택에서 제거하려면 - 다음을 입력하십시오.
git stash pop
특정 숨김을 적용하고 스택에서 제거하려면 다음과 같이 입력하십시오.
git stash pop stash@{n}
숨김없이 숨김을 적용하십시오.
마지막 숨김을 스택에서 제거하지 않고 적용합니다.
git stash apply
또는 특정 숨 고침
git stash apply stash@{n}
숨겨진 파일에서 이전 변경 내용 복구
git stash를 실행 한 후 가장 최근의 stash를 가져 오려면 다음을 사용하십시오.
git stash apply
은신처 목록을 보려면 다음을 사용하십시오.
git stash list
다음과 같은 목록을 얻을 것입니다.
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
원하는 stash에 표시된 번호로 복원하려면 다른 git 숨김을 선택하십시오.
git stash apply stash@{2}
부분 숨김
작업 집합에 일부 diff 만 숨기려면 부분 숨김을 사용할 수 있습니다.
git stash -p
그리고 대화 상대를 숨길 곳을 선택합니다.
2.13.0 버전에서 대화식 모드를 피하고 새로운 push 키워드를 사용하여 pathspec으로 부분 숨김을 만들 수 있습니다.
git stash push -m "My partial stash" -- app.config
결제와 함께 은닉 부분 적용
은신처를 만들고 그 은신처에있는 일부 파일 만 체크 아웃하고자합니다.
git checkout stash@{0} -- myfile.txt
대화 형 숨김
Stashing은 작업 디렉토리의 더러운 상태, 즉 수정 된 추적 파일 및 단계적 변경 사항을 취해 언제든지 다시 적용 할 수있는 변경되지 않은 변경 내용을 저장합니다.
수정 된 파일 만 숨기기 :
준비된 파일을 숨기고 수정 된 파일 만 숨기고 싶을 때 다음을 사용할 수 있다고 가정합니다.
git stash --keep-index
수정 된 파일 만 숨길 것입니다.
추적되지 않은 파일 저장 :
Stash는 변경되지 않고 준비된 파일 만 비 추적 파일을 저장하지 않습니다. 따라서 추적 할 수없는 파일을 숨겨야 할 필요가있는 경우 다음을 사용할 수 있다고 가정합니다.
git stash -u
이것은 추적되지 않은, 단계별 및 수정 된 파일을 추적합니다.
특정 변경 사항 만 감추기 :
파일에서 코드의 일부만 숨기거나 수정 된 파일과 숨김 파일의 일부 파일 만 숨기고 다음과 같이 할 수 있다고 가정합니다.
git stash --patch
망할 놈이 수정 된 모든 것을 숨기지는 않겠지 만, 숨기고 싶은 작업과 작업 디렉토리에 남기고 싶은 작업을 대화 형으로 묻습니다.
진행중인 작업을 다른 지점으로 이동하십시오.
작업하는 동안 잘못된 분기에 있음을 인식하고 아직 커밋을 작성하지 않은 경우 stashing을 사용하여 올바른 분기로 작업을 쉽게 이동할 수 있습니다.
git stash
git checkout correct-branch
git stash pop
git stash pop
은 마지막 숨김을 적용하고 숨김 목록에서 삭제합니다. 숨겨진 목록을 유지하고 일부 지점에만 적용하려면 다음을 사용할 수 있습니다.
git stash apply
유실 된 숨김 복구
방금 방금 터졌을 때 터미널이 아직 열렸다면 화면에 git stash pop
출력 한 해쉬 값을 여전히 갖게됩니다 :
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(git stash drop은 같은 라인을 생성합니다.)
그렇지 않으면 다음을 사용하여 찾을 수 있습니다.
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
이렇게하면 커밋 그래프의 팁에있는 모든 커밋이 더 이상 분기 나 태그에서 참조되지 않게됩니다. 커밋되지 않은 커밋 (모든 커밋되지 않은 커밋을 포함하여)은 그 그래프의 어딘가에 있습니다.
당신이 원하는 stash commit을 찾는 가장 쉬운 방법은 아마 그 목록을 gitk
에 전달하는 것일 것입니다.
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
이렇게하면 도달 가능한지 여부에 관계없이 저장소의 모든 단일 커밋을 보여주는 저장소 브라우저가 실행됩니다.
별도의 GUI 응용 프로그램을 통해 콘솔에서 좋은 그래프를 원한다면 git log --graph --oneline --decorate
와 같은 것으로 gitk
를 대체 할 수 있습니다.
숨겨진 커밋을 찾으려면이 양식의 커밋 메시지를 찾습니다.
일부 지점에서 WIP : commithash 일부 오래된 커밋 메시지
원하는 커밋의 해시를 알고 있으면 숨김으로 적용 할 수 있습니다.
git stash apply $stash_hash
또는 gitk
의 컨텍스트 메뉴를 사용하여 관심이있는 모든 도달 할 수없는 커밋의 분기를 만들 수 있습니다. 그런 다음 모든 일반 도구로 원하는대로 할 수 있습니다. 다 끝내면, 그 지점을 다시 날려 버리십시오.