source

Git Stash의 용도는 무엇입니까?

manysource 2023. 7. 9. 11:17

Git Stash의 용도는 무엇입니까?

만약 제가 A 지점에서 일하다가 갑자기 A 지점에서 커밋을 준비하기 전에 B 지점에서 일을 해야 한다면, 저는 A 지점에 저의 변경 사항을 저장하고, B 지점에서 일을 한 다음, A 지점을 체크아웃하고, 재고를 적용합니다.

A에서 작업을 수행하고 당일 작업을 중단하려면 작업을 저장한 후 다음날(작업을 다시 시작할 때) 적용해야 합니까, 아니면 작업 디렉터리에 커밋되지 않은 수정된 파일을 그대로 두어야 합니까?보안상의 이점이 있는 경우를 제외하고는 이 경우에 왜 제가 재고를 사용해야 하는지 모르겠습니다.

또한, 다른 시나리오:저는 직장과 집에서 모두 일합니다.집에 가고 싶을 때 약속을 지킬 준비가 안 된 경우, 제 일을 GitHub에 밀어넣은 다음 집에서 그 물건을 꺼낼 수 있습니까?

저장은 편리한 방법일 뿐입니다.지점이 너무 싸고 관리하기 쉽기 때문에 저는 개인적으로 거의 항상 새로운 임시 지점을 만드는 것을 스태킹하는 것보다 선호하지만, 그것은 주로 취향의 문제입니다.

제가 저장하는 것을 좋아하는 한 가지는 마지막 약속에서 무언가를 잊어버렸고 이미 같은 지점에서 다음 약속에 대한 작업을 시작했다는 것을 알게 되는 경우입니다.

# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something

# stash away the current mess I made
git stash save

# some changes in the working dir

# and now add them to the last commit:
git add -u
git commit --amend

# back to work!
git stash pop

나는 세 단락으로 답을 나눌 것입니다.

1부:

git stash 커밋되지 않은 변경사항을 "stash"에 저장합니다.참고: 작업 트리에서 변경 사항이 제거됩니다!)

git checkout some_branch (지정된 분기로 변경 - 이 경우)some_branch)

git stash list (stats 나열)

다음을 볼 수 있습니다.
on { {의 { of your branch { commit} stash@{0}: {branch_name}의 WIP: {마지막 commit}의 {SHA-1 of last commit} { commit}
Master: teststash@{1}: WIP on Master: 085b095c6 파일

git stash apply (현재 분기의 작업 트리에 스택 적용)

git stash apply stash@{12} (스택이 많은 경우 적용할 스택을 선택할 수 있습니다. 이 경우에는 스택을 적용합니다.12)

git stash drop stash@{0} (스택 목록에서 제거하려면 - 이 경우에는 스택0)

git stash pop stash@{1} (선택한 저장을 적용하고 저장 목록에서 삭제)

22는 다음과 같습니다.
이 명령을 사용하여 변경 내용을 숨길 수 있지만 그럴 필요는 없습니다.
보관하지 않고 다음 날에 계속할 수 있습니다.
변경사항을 숨기고 다른 분기에서 작업하거나 코드를 구현하기 위한 명령어로 분기가 없는 상태에서 저장하고 사용자 지정 사례를 커밋할 수 있습니다.
그리고 나중에 당신은 어떤 것이 더 나은지 확인할 수 있습니다.

33은 다음과 같습니다.
로컬에 대한 Stash 명령을 사용하여 변경 내용을 숨깁니다.
원격으로 작업하려면 커밋하고 눌러야 합니다.

주요 아이디어는

더티 작업 디렉터리의 변경 사항을 저장합니다.

따라서 기본적으로 Stash 명령을 사용하면 일부 변경 사항이 필요하지 않거나 현재로서는 필요하지 않지만 필요할 수도 있습니다.

작업 디렉토리와 인덱스의 현재 상태를 기록하지만, 새로 작성된 작업 디렉토리로 돌아가려는 경우 gitstash를 사용합니다.이 명령은 로컬 수정사항을 저장하고 HEAD 커밋과 일치하도록 작업 디렉토리를 되돌립니다.

다음 명령을 사용할 수 있습니다.

  • 커밋되지 않은 변경사항 저장하기

    git stash

  • 저장된 스택을 나열하는 방법

    git stash list

  • x가 0,1,2인 커밋되지 않은 변경 사항을 적용/반환하려면...

    git stash apply stash@{x}

참고:

  • 스택을 적용하고 스택 목록에서 제거하려면 다음과 같이 하십시오.

    git stash pop stash@{x}

  • 스택을 적용하여 스택 목록에 유지하려면 다음과 같이 하십시오.

    git stash apply stash@{x}

StackOverflow가 의견 기반 답변을 위한 장소가 아니라는 것을 알고 있지만, 저는 실제로 언제 변경 사항을 재고로 보류해야 하는지에 대해 좋은 의견을 가지고 있습니다.

당신은 당신의 실험적 변화를 약속하고 싶지 않을 것입니다.

작업 공간/작업 트리를 변경할 때 병합, 푸시, 가져오기 또는 풀과 같은 분기 기반 작업을 수행해야 하는 경우에는 깨끗한 커밋 지점에 있어야 합니다.따라서 작업 공간이 변경된 경우 이를 커밋해야 합니다.하지만 그들을 저지르고 싶지 않다면요?만약 그들이 실험적이라면?당신의 범죄 경력에 포함되지 않았으면 하는 것?깃허브에 접근할 때 다른 사람들이 보지 않았으면 하는 것?

하드 재설정으로 로컬 변경 사항을 손실하지 않으려는 경우

이 경우 하드 리셋을 수행할 수 있습니다.그러나 하드 재설정을 수행하면 로컬 작업 트리 변경 내용이 모두 손실됩니다. 모든 변경 내용이 마지막으로 커밋한 시점의 위치로 덮어쓰므로 변경 내용이 모두 손실됩니다.

따라서 '언제 저장해야 합니까?'라는 대답은 동기화된 작업 트리/색인/커밋을 사용하여 깨끗한 커밋 지점으로 돌아가야 하지만 프로세스에서 로컬 변경 사항을 잃지 않으려는 경우입니다.거스름돈은 창고에 넣어두면 됩니다.

그리고 일단 재고를 다 쌓아 놓고 병합하거나, 당기거나, 밀면, 그냥 재고를 쌓거나, 신청하면 원래 있던 곳으로 돌아갈 수 있습니다.

깃스타시와 깃허브

GitHub은 지속적으로 새로운 기능을 추가하고 있지만, 현재로서는 저장할 수 있는 방법이 있습니다.다시 말하지만, 창고의 개념은 그것이 지역적이고 사적이라는 것입니다.워크스테이션에 대한 물리적 액세스 없이는 다른 사람이 당신의 저장소를 엿볼 수 없습니다.Git reflog가 비공개이고 Git log가 공개된 것과 같은 방식입니다.GitHub까지 밀리면 개인적인 일이 아닐 수도 있습니다.

한 가지 요령은 작업 공간의 차이를 수행하고 Git 저장소에 차이를 확인한 다음 커밋한 다음 푸시하는 것입니다.그러면 집에서 당겨서 디프를 얻은 다음 풀 수 있습니다.하지만 그것은 그런 결과를 얻기에는 꽤나 지저분한 방법입니다.

git diff > git-dif-file.diff

pop the stash

, 면치를 치면,git stash된 내용이 때 개체를 (이 했던 처럼).git checkout -- .변경 사항을 잃지는 않을 것입니다.나중에 스택의 맨 위에서 팝업할 수 있습니다.

stash 명령은 마지막 커밋 이후 변경한 내용을 저장합니다.당신의 경우 다음날 계속 작업할 것이라면 숨길 이유가 없습니다.나는 당신이 커밋하고 싶지 않은 변경을 취소하기 위해서만 stash를 사용할 것입니다.

주요 사용 사례는 이미 위의 답변에 나와 있습니다.

저장소의 사용 사례 중 하나는 분기의 변경 내용이 저장소의 변경 내용과 다른 경우 저장소를 열거나 적용할 때 충돌이 발생할 수 있다는 것입니다.

사용할 수 있습니다.git stash branch저장된 변경사항을 적용할 새 분기를 만듭니다.를 들면 를들면예,

git stash branch master_stash_newBranch stash@{1}

이렇게 하면 저장소를 생성한 커밋을 기준으로 새 분기가 체크아웃되고 저장된 변경 사항이 해당 분기에 표시됩니다.

아마도 당신은 재고를 일시적인 "사적인" 약속으로 볼 수 있을 것입니다.저장할 때 다른 사용자가 볼 수 있는 커밋 기록에 추가되지 않습니다.그것은 당신이 무언가를 빨리 치워야 하는 상황을 위한 것입니다.

한 가지 간단한 예로, 마스터 브랜치로 빨리 돌아가 스테이징 영역에 추가하거나 적절한 커밋을 수행할 시간이 없습니다(아마도 수행한 작업을 검토할 시간이 없고 명확한 커밋 메시지와 설명을 신속하게 도출할 수 없습니다).

끔찍한 약속이 모두가 볼 수 있도록 거기에 있을 것입니다.Stash는 커밋과 유사합니다. 메시지를 추가하고 작업 디렉터리를 재설정한 다음 나중에 다시 방문할 수 있습니다. 그러면 사용자만 볼 수 있습니다.적어도, 저는 스테이시를 누르는 것이 기본적인 행동이라고 생각하지 않습니다.

여기에 언급된 다른 많은 용도가 있습니다.

유용할 수 있는 스택을 Git 저장소 "기계" 외부의 저장 영역으로 생각하는 한 가지 방법은 모든 분기와 분리되어 있으므로 어디서나 액세스할 수 있습니다.

두 가지 방법을 모두 사용하여 저장하고 시작하거나 업스트림에서 새 분기를 생성할 수 있습니다.변경 내용을 다시 실행할 때 더 편리하게 저장할 수 있는 방법은 Stash입니다.

언급URL : https://stackoverflow.com/questions/20537223/what-is-the-intended-use-case-for-git-stash