1. 테스트 시나리오 1:
index.html이 이미 코드 저장소에 있다고 가정합니다. 이제 index.html 페이지를 수정하고 index.html 페이지를 임시로 저장한 다음 계속해서 색인을 수정합니다. .html 페이지에 이어 git stash를 실행하면, 이번에는 코드 웨어하우스가 정리되어 수정 사항이 임시로 저장된 후 git stash pop을 실행하여 수정 사항이 복원된 것으로 확인됩니다. 그러나 준비 영역의 수정 사항은 손실됩니다. 즉, git status에서는 Staged 수정 사항이 없는 것으로 확인되었으며, 이전에 Staged 수정 사항은 폐기되었지만 작업 공간의 수정 사항은 완전히 유지되었습니다.
2. 테스트 시나리오 2:
이제 test01.html 페이지를 추가하면 git status에 test01.html이 git에 의해 추적되지 않는 것으로 표시되고, 이때 index.html 파일을 수정하면 git stash가 이를 발견합니다. index.html 파일은 임시 저장이 되지만, test01.html 파일은 임시 저장이 되지 않습니다. 즉, git status는 git에서 추적하지 않는 파일을 임시로 저장하지 않습니다.
3. 테스트 시나리오 3:
시나리오 2를 계속하여 index.html 파일을 수정하고 test01.html 파일을 새 파일로 추가합니다. 이때 git은 test01.html 파일을 추가하고 test01을 실행합니다. git이 html을 추적한 다음 git stash를 실행하면 git stash show 메소드를 통해 test01.html 파일이 일시적으로 저장되고 git stash pop을 통해 수정 사항이 복원되는 것을 볼 수 있습니다. git test01.html 파일은 임시 상태이고 index.html은 여전히 유지된 작업공간 수정 사항임을 발견했습니다. 즉, 이전에 git에서 추적하지 않았던 파일을 git add하면 git stash 이후에는 이 파일이 임시로 저장되고, git stash pop 이후에는 새로 추가된 파일이 여전히 임시 상태로 유지됩니다. 시나리오 1, 인덱스 .html 파일에는 작업 공간의 수정 사항만 임시 저장되고 임시 저장 영역의 수정 사항은 손실됩니다.
4. 테스트 시나리오 4:
계속해서 index.html 파일을 수정하고 test01.html 파일을 새 파일로 추가합니다. 이때 git은 test01.html 파일을 추가하고 test01을 실행합니다. html을 git으로 추적한 후 test01.html 파일을 수정한 다음 git stash, git stash pop을 실행하여 test01.html이 여전히 임시 상태에 있지만 임시 저장된 파일의 내용이 최종 수정된 내용임을 확인합니다. 작업 공간. 즉, 이전에 git에서 추적하지 않았던 파일을 git add한 후 파일을 수정하는 것입니다. git stash 이후에는 해당 파일이 일시적으로 저장되고, git stash pop 이후에는 새로 추가된 파일이 그대로 유지됩니다. 임시 상태이지만, 임시 저장된 수정 내용은 추가를 통한 임시 수정 내용이 아닌 이전 작업공간의 수정 내용입니다.
위 테스트를 통해 git stash의 작동 패턴을 찾지 못해 매우 혼란스러웠습니다. git 전문가가 조언과 분석을 해주기를 바랍니다.
먼저
git stash
명령의 기본 기능을 설명하겠습니다. 는 작업 디렉터리의 더티 상태, 즉 수정된 추적 파일 및 임시 변경 사항을 처리합니다. , 완료되지 않은 수정 사항은 스택 에 저장됩니다. 이 사실을 알고 나면 제가 요약한 몇 가지 핵심 사항을 살펴보겠습니다.포스터의 실험 2에서 설명한 대로
git stash
명령은 추적된 파일을 스택에 푸시하는 반면, 추적되지 않은 파일은 스택에 푸시하지 않습니다.임시저장영역에 전작이 추가된 경우,
git stash
명령은 기본적으로 스택을 임시저장영역에 팝하는 수정을 에서 설명한 대로 추가하지 않습니다. 포스터의 실험 1 그런 경우인데 포스터의 설명이 사실 틀렸습니다. 이전에 임시 저장한 수정 사항이 버려지거나 없어지는 것이 아니라 작업 영역에 남아 있고 임시 저장 영역에 추가되지 않았습니다.포스터의 실험 2, 3에 새로 추가된 파일 test01.html 은 사실 특수한 상황입니다. 우리는 이것을 이렇게 이해할 수 있습니다:
stash pop
의 결과는 이전 수정 사항을 복원하는 것이며 test01.html에 대해 수행할 수 있는 복구 작업은 임시 저장 영역에 다시 합류하는 것뿐입니다. 그렇지 않으면 test01.html이 원래 상태로 돌아갑니다. 추적되지 않은 상태.이전 임시저장의 수정사항을 다시 적용하고 싶다면
git stash pop
뒤에--index
옵션을 추가하면 완전히 동일하게 복원할 수 있습니다. 즉, 이전에 임시로 저장된 것은 이제 임시 상태가 되고 임시로 저장된 것은 여전히 비일시적 상태가 됩니다.마지막으로 포스터의 내용을 말씀드리겠습니다.
또는
사실 설명이 잘못되었거나 이렇게 설명하면 안 됩니다. 오해를 불러일으킬 수 있기 때문입니다.
, 그러나 실제 상황은 다음과 같아야 합니다.git stash
는 작업공간의 수정사항을 임시로 저장만 할 뿐이라고 착각할 수도 있습니다git stash
은 복원된 작업을 기본적으로 작업 공간에 유지하지만 는 자동으로 다시 스테이징하지 않습니다.포스터는 위의 실험을 다시 실행하여 내 진술을 확인할 수 있습니다.