programing

git stash branch-specific인가요, 아니면 전체 저장소를 대상으로 하나요?

lovejava 2023. 11. 5. 10:48

git stash branch-specific인가요, 아니면 전체 저장소를 대상으로 하나요?

지점에 들어가서 일을 좀 했습니다.저는 다른 지점에 들어가고 싶었지만 약속하고 싶지 않아서 그렇게 했습니다.git stash. 그 다음에.git checkout <otherbranch>. 저는 그곳에서 일을 좀 했고, 첫 번째 지점과 마찬가지로 일을 시작하기 전에 전환하고 싶었습니다.그래서.git stash거기도 그렇고요.첫번째 지점으로 다시 전환하여 언스태시를 시도했습니다(git stash pop특정 지점에서 은닉처를 얻을 수 있을 거라 생각했습니다나는 그것이 그들로부터 숨겨진 것을 제거한 것에 놀랐습니다.<otherbranch>(latest 스테이징).이 동작은 전체 로컬 저장소에 대해 하나의 은닉처만 존재한다는 것을 의미합니다.

이스git stash지점별로 구분할 수 있습니까? 아니면 전체 저장소에 적용할 수 있습니까?저장소 전체를 대상으로 하는 경우 분기별로 할 수 있도록 옵션을 전달할 수 있습니까?

아니요, 아니요. git stash는 저장소 단위입니다.

여기 그것의 사용법에 대한 좋은 페이지가 있습니다.

현재 스택을 보려면 다음을 수행합니다.

git stash list

스택에서 특정 스택을 선택하려면 해당 스택을 참조하십시오.stash@{number}위와 같이

동작을 분기별로 수행하려면 분기에 대해 커밋(또는 여러 커밋)만 수행할 수 있습니다.커밋은 나중에 언제든지 "실행 취소"할 수 있습니다(예:git reset,어느 하나--soft아니면--mixed; git reset 설명서를 참조하거나 함께 사용합니다.git rebase -i일시적인 것을 폐기하는 동안 최종적인 "진짜" 커밋만 유지합니다.

(정말로 본받으려면)git stash인덱스 상태에 대한 커밋과 워크트리 상태에 대한 커밋이 적어도 두 개 필요합니다.인덱스 상태를 저장하고 복원할 계획이 없다면 그냥git add -A전체 워크 트리 상태를 확인하고 임시 커밋에 넣었습니다.아니면.git stash는 셸 스크립트이므로 기본적으로 branch 단위로 작동하도록 복사 및 수정하기가 매우 용이합니다.refs/pb-stash/branch하나의 글로벌이 아닌 그것의 작업명 공간으로서.refs/stash레포(repo) 전체에 대하여명시적으로 이름을 지정하면 한 분기에서 다른 분기로 스테이시를 가져올 수 있습니다.)

여기 있는 모든 답변들이 왜 다음과 같은 숨겨진 것을 모방해야 하는지 확신할 수 없습니다.commit+reset. 스테이시는 완벽하게 사용해도 좋습니다.

다음은 스테이시 워크플로우입니다.

분기를 전환해야 할 때 커밋할 준비가 되지 않은 경우 변경 사항을 스택에 저장합니다.

git stash save "Your custom stash message"

(사용자 지정 메시지를 원하지 않을 경우, 간단히 다음을 사용합니다.git stash).

분기로 돌아가면 다음과 같은 스테이시 목록을 볼 수 있습니다.

git stash list

enter image description here

지점에 있는 경우FixIssue0203당신은 사용할 수 있습니다.git stash pop왜냐하면 이것은 위에 적용될 것이기 때문입니다.stash@{0}은닉처에서 제거합니다.

하지만 당신이 지사에 있는 경우ImproveReadme당신은 먼저 stage 1을 적용해야 합니다.git stash apply stash@{1}스택에서 스택 1을 제거합니다.git stash drop stash@{1}.

그거에요!

파일을 개별적으로만 숨기려면 일이 좀 까다롭습니다.자세한 내용은 https://stackoverflow.com/a/12305243/2311074 를 읽어보세요.제트브레인을 사용하는 경우 셸브(shelve)라는 기능이 있어 나중에 재사용하고 싶은 파일을 체리픽할 수 있습니다. https://www.jetbrains.com/help/idea/shelving-and-unshelving-changes.html (GIT의 일부가 아닙니다.)

git stashbranch 단위가 아닙니다.

  • 대신에git stash(스캐시와 가지가 많으면 쉽게 분실될 수 있음)
  • 나는 그것을 하는 것을 제안합니다.git commit완료되지 않은 코드를 분기에 저장하고 코드를 완료할 준비가 되었을 때git reset ${COMMIT_HASH_VALUE}미완성 코드를 되찾다
  • git commit그리고.git reset정확하게 함께 사용될 때 a를 시뮬레이션 할 수 있습니다.git stash특정 지점에 대하여

여기 가치와 사용법을 보여주는 일반적인 실제 시나리오가 있습니다.commit그리고.reset명령:

  • 당신은 피쳐 브랜치 X에서 작업중인데 당신의 코드는 테스트를 컴파일하거나 통과하지도 않습니다.
  • 현재 새 기능보다 우선 순위가 높은 버그가 있으므로 버그 수정 작업을 즉시 시작해야 합니다.
  • git stash를 하는 것보다 (많은 stash와 많은 branch가 있기 때문에 stash는 mix에서 손실됩니다)
  • 당신은 할 수 있습니다.git commit피쳐 브랜치 X에
    • 을 적어 두다COMMIT_HASH_VALUE나중을 위하여
  • 새로운 지점 Y에서 핫픽스를 확인합니다.
  • 분기 Y에서 핫픽스 완료(핫픽스를 기준선으로 가져오고 핫픽스 분기를 삭제하기 위해 병합 요청)
  • 그런 다음 피쳐 브랜치 X를 다시 확인합니다.
  • 컴파일하거나 테스트를 통과하지 못한 미완성 작업을 터뜨리기 위해 --> 그냥.git reset ${COMMIT_HASH_VALUE}

(FYI 기본값:git reset--mixed)

이것은 당신의 질문에 대한 답이 아닐 수도 있지만, 저는 트레버 보이드 스미스가 수락된 답변에서 언급한 것과 같은 사용 사례에 대한 답이라고 믿습니다.

"commit 및 reset 명령의 값과 사용량을 보여주는 일반적인 실제 시나리오는 다음과 같습니다.

기능 분기 X에서 작업 중인데 코드가 컴파일하거나 테스트를 통과하지도 않았는데 현재 새 기능보다 우선 순위가 높은 버그가 있으므로 즉시 버그 수정 작업을 시작해야 합니다(게다가 많은 분기와 많은 분기가 있기 때문에 해당 버그 수정 작업을 시작해야 합니다)." h가 이를 굵게 표시했습니다.많은 사람들에게 호감을 느낍니다.

제가 하는 일은 말 그대로 동일한 저장소의 복사본을 5개 가지고 루트 폴더의 이름을 적절하게 지정하여 사용자가 어디에 있는지 파악하지 않고 말 그대로 몇 초 만에 작동하는 지점으로 전환할 수 있도록 하는 것입니다.IDE의 두 번째 인스턴스도 열 수 있으므로 멀티 태스커를 사용할 경우 폴더 2에서 20분 핫픽스를 작업하고 작업이 끝나면 폴더 1에서 더 큰 작업으로 돌아갈 수 있습니다.

어떤 폴더를 어떤 용도로 사용할 것인지 어느 정도 관리해야 합니다. 모든 폴더는 정기적으로 최신 상태를 유지해야 합니다.또한 이러한 작업 디렉토리의 루트를 어떤 버전의 파일 스토리지에 정기적으로 백업/동기화하여 항상 혼란에서 벗어날 수 있도록 하는 것이 좋습니다.깃 퓨리스트들은 이 워크플로우에 동의하지 않을 수 있지만, 저는 이 워크플로우를 사용하는 다른 많은 개발자들을 봐왔습니다.

장단점.개인적으로 저는 이 방법이 창고 분실이나 어느 지점에 창고를 다시 적용해야 할지에 대한 걱정 없이 트레버가 언급한 사용 사례를 수행하는 가장 빠른 방법이라고 생각합니다.즉, 실수로 범하고 싶지 않은 현재 분기의 커밋되지 않은/스캐치되지 않은/완전히 망가진 엉망인 상태에서 파일을 병합/디퍼할 수 있습니다.

언급URL : https://stackoverflow.com/questions/20526355/is-git-stash-branch-specific-or-for-the-whole-repository