콘텐츠로 건너뛰기
GitTree

레슨 26 · 회복

작업을 숨겨두고 안전하게 재개하세요

완료되지 않은 편집 내용과 새 노트를 보관함과 함께 설정하고 Apply를 사용하여 다시 가져오고 충돌 시 Pop이 어떻게 작동하는지 확인하세요. 보관함은 사용자가 결정할 때까지 유지됩니다.

이 브라우저에 진행 상황이 저장되었습니다.

재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).

영어 내레이션 · English and Arabic 캡션

비디오 페이지 열기YouTube에서 시청하기

무엇을 배울 것인가

  • 추적된 편집 내용, 추적되지 않은 파일 또는 스테이징된 내용만 숨김 파일에 넣을 항목을 선택하세요.
  • Apply가 숨김을 유지하고 Pop이 깨끗한 적용 후에만 숨김을 제거하는 이유를 설명하십시오.
  • 편집 내용과 메모가 모두 돌아왔고 분기가 이동하지 않았는지 확인하세요.
  • 보관함을 잃지 않고 Pop 충돌에서 복구하세요.

시작하기 전에

귀하는 docs/stash-conflict.md("가상 주소 사용")을 추가하는 하나의 커밋이 있는 18과 결과의 분기인 private/stash-hint에 있습니다. 작업 트리에는 해당 파일에 대한 완료되지 않은 편집 내용과 Git이 본 적이 없는 새 파일 docs/signup-hint.md이 있습니다. 누군가가 당신에게 다른 것으로 전환하라고 요청하므로, 당신은 절반만 작업을 완료하지 않고 두 가지를 모두 제쳐두기를 원합니다.

모든 것이 로컬이며 무료 요금제(GitTree에서 로그인을 요청함)입니다. 호스팅 계정도 없고, 공급자도 없고, 인터넷도 없습니다. 모든 신원은 허구입니다(example.com). 실제 프로젝트에서는 이 강의를 실행하지 마세요.

동일한 사본에서 둘 다 수행하지 말고 GitTree 또는 기본 Git 명령을 사용하여 변경하십시오. 결과를 읽는 것은 항상 안전합니다. 메뉴 라벨은 GitTree 2.0의 자체 문자열에서 왔으며 기본 명령은 일회용 복사본에서 Git 2.43을 사용하여 실행되었습니다. GitTree 단계가 macOS, Windows 또는 Linux에서 실행되지 않았습니다.

개념 및 상태 효과

Stash는 로컬 변경 사항을 Git 개체로 저장한 다음 작업 트리를 마지막 커밋으로 다시 정리합니다. 유지하려는 브랜치를 백업하거나 대체하는 것이 아닌 짧은 중단 도구입니다.

숨김에는 기본적으로 추적된 편집 내용이 보관됩니다. 추적되지 않은 파일은 Git이 --include-untracked을 사용하여 요청하지 않는 한 남겨집니다. GitTree의 Stash Changes… 대화상자가 열릴 때 Include untracked files가 켜져 있습니다. 어쨌든 확인해 보세요. 무시된 파일은 다른 카테고리이므로 여기에 보관되지 않습니다. Only staged changes는 인덱스에 있는 내용만 숨기고, Keep staged changes in place too는 인덱스를 그대로 둡니다.

Apply Stash은 변경 사항을 다시 적용하고 목록에 숨김을 유지합니다. Pop Stash는 이를 적용하고 적용이 깨끗한 경우에만 항목을 제거합니다. 충돌하는 경우 숨김은 그대로 유지되며 작업 트리에서 충돌을 해결합니다. GitTree의 Apply 및 Pop은 준비된 상태를 복원하지 않습니다. git stash apply --index이 그렇게 하지만 앱에서는 이를 사용하지 않으므로 단계적 편집이 단계적이지 않은 상태로 돌아옵니다.

스태킹 및 적용은 절대로 브랜치를 이동하거나 커밋을 하지 않습니다. 작업 트리와 숨김 항목만 변경됩니다.

정확한 프로젝트 상태 준비

18과에서 남겨둔 프로젝트의 별도 일반 복사본에서 시작하고 원본 gittree-features은 그대로 둡니다. 브랜치를 생성하고 DOC_STASH_BASE를 저장한 후 커밋합니다. 그런 다음 스테이징 없이 동일한 파일에 DOC_STASH_WORK를 저장하고 DOC_HINT를 새 파일로 저장합니다. DOC_STASH_OTHER 및 STASH_RESOLVED는 별도의 충돌 복사본에서만 사용됩니다.

완전한 파일 입력

아래에 명명된 단계에서만 저장하십시오. 이는 최종 개행 문자가 포함된 완전한 UTF-8/LF 본문입니다. 마크다운 펜스를 붙여넣지 마세요. 변경되지 않은 실행 가능 파일은 명명된 입력을 상속합니다. 별도의 변형 버전이 원본을 덮어쓰면 안 됩니다.

docs/stash-contribute.md — DOC_STASH_BASE

출력
Use a fictional address.

docs/stash-contribute.md — DOC_STASH_WORK

출력
Use a complete fictional email address.

docs/signup-hint.md — DOC_HINT

출력
Unfinished signup hint: use fictional data only.

docs/stash-contribute.md — DOC_STASH_OTHER

출력
Do not send the address anywhere.

docs/stash-contribute.md — STASH_RESOLVED

출력
Use a complete fictional email address. Nothing is sent.

GitTree에서

Command+Shift+P(Ubuntu에서는 Ctrl+Shift+P)를 사용하여 팔레트를 엽니다. 스태시 항목은 Stashes 아래 왼쪽 패널에 나열됩니다. 숨김의 작업은 마우스 오른쪽 버튼 클릭 메뉴에 있습니다.

  1. 다음 섹션에 표시된 대로 분기와 두 가지 단계되지 않은 변경 사항을 빌드합니다. 변경 사항 목록을 읽어보세요. docs/stash-conflict.md은(는) 수정되었고 docs/signup-hint.md은(는) 새로운 것입니다.
  2. 팔레트를 열고 Stash Changes…을 실행합니다. 대화 상자에서 Message을(를) signup hint rehearsal로 설정합니다. Only staged changes이(가) 꺼져 있습니다. Include untracked files가 켜져 있습니다. Keep staged changes in place too이(가) 꺼져 있습니다. Stash을 선택하세요.
  3. "변경 사항을 저장했습니다."라는 알림을 기다립니다. 변경 사항 목록이 비어 있고 메모가 디스크에서 사라지며 숨김 항목이 Stashes 아래에 나타납니다.
  4. 숨김 행을 마우스로 가리키면 툴팁에 "추적되지 않은 파일 포함"이 표시됩니다. 마우스 오른쪽 버튼을 클릭하고 Show Stash를 선택합니다. 그래프는 숨김을 선택하고 오른쪽 패널에는 추적된 변경 사항 docs/stash-conflict.md이 나열됩니다. 추적되지 않은 메모는 보관함의 별도 부분에 보관됩니다.
  5. 다시 마우스 오른쪽 버튼을 클릭하고 Apply Stash을 선택하세요. "스태시를 적용했지만 여전히 목록에 있습니다."라는 알림이 표시됩니다.
  6. 결과를 확인하세요. docs/stash-conflict.md이 다시 수정되고, docs/signup-hint.md이 추적되지 않은 파일로 돌아오고, 분기 팁이 동일한 커밋이고 숨김이 여전히 나열되어 있습니다.
  7. Separate conflict copy. 두 번째 복사본에서는 숨김 후에 DOC_STASH_OTHER를 동일한 파일에 커밋합니다. 스태시를 마우스 오른쪽 버튼으로 클릭하고 Pop Stash을 선택합니다. "스태시가 변경 사항과 충돌합니다. 충돌을 해결하세요. 스태시는 유지됩니다."라는 경고가 표시됩니다.
  8. 충돌한 파일은 Conflicted으로 나열됩니다. 이를 열고 출력에 STASH_RESOLVED를 쓰고 Save and Mark Resolved을 선택합니다. 그 보관함은 아직도 거기에 있습니다. 작업이 안전하다고 확신하면 마우스 오른쪽 버튼을 클릭하고 Delete Stash…를 선택하세요. 대화 상자에는 해당 항목이 목록에서 제거되고 복구 스냅샷에 보관된다는 내용이 표시됩니다. GitTree의 Undo는 삭제된 숨김 파일을 아직 복원하지 않으므로(30강) 삭제를 마지막으로 처리합니다.

과정의 모든 일반적인 커밋에 대해: Summary는 명시된 주제이고, Description는 비어 있으며, 옵션 Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit 및 Allow Empty Commit는 꺼져 있습니다.

터미널에서

18과 결과의 별도 사본에서:

Command · bash
git switch --create private/stash-hint

DOC_STASH_BASE를 docs/stash-conflict.md로 저장한 후:

Command · bash
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: establish the stash conflict baseline"

스테이징 없이 docs/stash-conflict.md에 대한 DOC_STASH_WORK 및 DOC_HINT를 docs/signup-hint.md로 저장합니다. 그런 다음 둘 다 숨깁니다.

Command · bash
git stash push --include-untracked --message "signup hint rehearsal"
git status --short
git stash list --format=%s
출력
On private/stash-hint: signup hint rehearsal

상태에는 아무것도 인쇄되지 않습니다. 트리가 깨끗합니다. 충돌을 대비해 이 상태의 그대로 복사본을 보관한 후 다음을 적용하세요.

Command · bash
git stash apply 'stash@{0}'
git status --short
git stash list --format=%s
git rev-parse HEAD
출력
 M docs/stash-conflict.md
?? docs/signup-hint.md
On private/stash-hint: signup hint rehearsal

두 본문이 모두 돌아왔고 숨김은 여전히 나열되어 있으며 HEAD은 이전 커밋입니다. --include-untracked가 없으면 동일한 푸시로 인해 docs/signup-hint.md가 디스크에 남고 편집 내용만 숨겨집니다.

별도의 복사본에 DOC_STASH_OTHER를 저장하고 커밋한 다음 팝업합니다.

Command · bash
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: change the stash target"
git stash pop 'stash@{0}'
git ls-files --unmerged
git stash list --format=%s

Pop은 1로 종료되고 "CONFLICT(content)" 및 "다시 필요할 경우를 대비해 숨김 항목이 유지됩니다."를 인쇄합니다. 병합되지 않은 세 개의 항목이 나열되고 파일에 충돌 마커가 포함되며 docs/signup-hint.md이(가) 복원되고 숨김이 계속 나열됩니다. 계속하려면 병합이나 리베이스가 필요하지 않습니다. STASH_RESOLVED를 저장하고 git add -- docs/stash-conflict.md을(를) 실행하세요. 대신 자체 브랜치에 작업을 보관하기 위해 git stash branch rescue-hint 'stash@{0}'는 스태쉬가 생성된 커밋에 브랜치를 생성하고 이를 적용한 후 그 후에만 스태쉬를 제거합니다.

결과

첫 번째 사본의 Where you end:에는 트리에 편집 내용이 있고 메모가 다시 있지만 HEAD은 이동되지 않았으며 숨김은 여전히 나열되어 있습니다. 충돌 사본에서 팝은 충돌을 보고했고, 보관함은 살아남았으며, 당신의 해결책이 준비되었습니다. stash 명령으로 커밋이 이루어지지 않았으며 아무것도 푸시되지 않았습니다.

일반적인 실수

  • 추적되지 않는 파일은 포함하지 않는 한 숨겨지지 않습니다.
  • Pop이 충돌 후 숨김을 삭제했다고 가정합니다. 그렇지 않았습니다.
  • 첫 번째 적용이 이미 작동했는데 두 번 적용한 후 중복된 변경사항이 있는지 궁금합니다.
  • 은신처를 장기 저장소로 사용합니다. 지점과 함께 유용한 작업의 이름을 지정하십시오.

뭔가 잘못되면

Pop 충돌이 발생한 후에는 숨김을 그대로 두고 파일을 해결한 후 결과를 확인한 후 삭제하세요. 잘못된 브랜치에 적용한 경우 스태쉬에 해당 작업이 아직 남아 있는지 확인한 후에만 해당 작업을 폐기하세요. Create Branch from Stash…는 스태시가 생성된 커밋에서 자체 브랜치를 제공합니다.

이해도를 확인해보세요

각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.

  1. 질문 1/6

    Apply Stash는 수행하지 않지만 Pop Stash는 수행하는 작업은 무엇입니까?

    답을 하나 선택하세요.

  2. 질문 2/6

    추적되지 않은 파일 포함을 설정한 상태에서 Stash Changes...를 실행합니다. 다음 중 사실은 무엇입니까?

    해당하는 답을 모두 선택하세요.

  3. 질문 3/6
    필수

    숨김 후에 Apply Stash를 선택합니다. 무엇이 보이나요?

    답을 하나 선택하세요.

  4. 질문 4/6

    입력 변경: 사본에서 숨기기 전에 추적되지 않은 파일 포함을 끄십시오. docs/signup-hint.md은(는) 어떻게 되나요?

    답을 하나 선택하세요.

  5. 질문 5/6
    필수

    충돌 복사본에서 Pop Stash는 "스태시가 변경 사항과 충돌합니다. 충돌을 해결하십시오. 스태시는 유지됩니다."라고 경고합니다. 당신은 일이 없어진 것을 걱정합니다. 무엇이 진실이고 당신은 무엇을 하는가?

    답을 하나 선택하세요.

  6. 질문 6/6
    필수

    첫 번째 사본에 Stash를 적용한 후 어떤 판독 결과가 강의 내용대로 작동했음을 보여주나요?

    해당하는 답을 모두 선택하세요.

6개 중 0개 정답

수업을 완료하려면 필수 질문에 올바르게 답하세요.

이 브라우저에서 확인했습니다.

연습

스태쉬 이후 트리가 깨끗했고 Apply가 두 파일을 모두 복원했으며 스태쉬가 여전히 나열되어 있음을 증명하십시오. Include untracked files가 꺼져 있으면 어떻게 될지 예측하세요. 충돌 사본에서 은닉물이 Pop에서 살아남았다는 것을 증명하십시오.

귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.

수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.

요약

  • 의도적으로 숨김 옵션을 선택하십시오.
  • 적용은 항목을 유지합니다.
  • 충돌하는 팝도 그것을 유지합니다.

용어집 소개

은닉물(Stash) 신청하다 - 적용하다; 팝 - 팝 추적되지 않음

비디오 대본

영상의 나레이션, 큐별로.

성적표 표시
  1. 끝나지 않은 일은 옆으로 치워두고 가져오세요 무사히 돌아왔습니다.
  2. 보관함은 편집 내용을 선반에 보관하고 작업 트리를 정리합니다.
  3. Apply는 변경 사항을 다시 가져오고 유지합니다. 항목. 깨끗하면 Pop이 제거합니다.
  4. 하나의 커밋으로 브랜치를 만든 후 편집하세요. 파일을 삭제하고 새 메모를 추가합니다.
  5. 변경사항 목록에서: 수정된 파일 1개, 그리고 하나의 새 파일.
  6. 현재 커밋을 기록합니다. 그러면 안 된다 이동.
  7. 팔레트를 열고 Stash Changes를 실행하세요.
  8. 당신이 알아볼 수 있는 메시지를 보내세요.
  9. Staged만 꺼져 있습니다. 추적되지 않은 항목 포함 에. 스테이징 유지가 꺼져 있습니다.
  10. 무시된 파일은 다른 카테고리입니다. 그리고 들어가지 마세요.
  11. Stash를 선택하고 알림을 기다립니다.
  12. 변경 사항 목록이 비어 있고 숨김 파일이 있습니다. 나열되어 있습니다.
  13. 툴팁에는 추적되지 않은 파일이 있다고 나와 있습니다. 포함됩니다. Show Stash는 해당 파일을 나열합니다.
  14. 스태시를 마우스 오른쪽 버튼으로 클릭하고 적용을 선택합니다. 은닉물.
  15. 통지문에는 보관함이 아직 남아 있다고 나와 있습니다. 목록.
  16. 둘 다 돌아왔습니다: 편집과 메모.
  17. 브랜치 팁은 동일한 커밋입니다. 아니요 stash 명령이 하나 만들어졌습니다.
  18. 그리고 그 은닉물은 아직도 선반 위에 있습니다.
  19. 터미널에서 git stash push를 실행합니다. 추적되지 않음을 포함하고 상태를 포함합니다.
  20. 목록에는 다음과 같은 메시지가 표시됩니다. 먼저 지점 이름을 입력하세요.
  21. git stash apply는 둘 다 다시 가져옵니다.
  22. 숨김은 여전히 나열되어 있으며 HEAD는 동일합니다.
  23. 해당 옵션이 없으면 메모가 계속 켜져 있습니다. 디스크.
  24. 충돌 사본에서 우리는 또 다른 커밋을 수행합니다. 먼저 바꾸고 나서 터지세요.
  25. 경고에는 은닉물이 보관되어 있다고 나와 있습니다. 는 파일이 충돌했습니다.
  26. 파일을 해결하고 해결됨으로 표시합니다. 그 보관함은 아직도 거기에 있습니다.
  27. 확실한 경우에만 숨김을 삭제하세요. 아니면 자체 분기를 제공하세요.
  28. 실천하십시오: 깨끗함을 증명하고, 회복하고, 보관하십시오. 그런 다음 추적되지 않은 항목을 포함하지 않고 예측합니다.
  29. 다음으로 소프트, 믹스, 리셋이 무엇인지 알아보세요. 각 변경 사항이 어렵습니다.