programing

로컬 변경 내용을 삭제하지 않고 git 스위치 분기

bestprogram 2023. 5. 12. 22:47

로컬 변경 내용을 삭제하지 않고 git 스위치 분기

좋아요, 어느 날 우리가 많은 수정을 하고 그것들을 하기 위해 갔을 때 우리가 잘못된 지점에서 일하고 있다는 것을 알게 되었다고 합시다.

로컬 변경사항을 무시하지 않고 어떻게 Git가 분기를 전환하도록 강제할 수 있습니까?

아마 답장을 기다리는 동안 순진한 방법으로 이 일을 진행할 것입니다만, 제가 전에 이런 일이 없었다고 말한다면 거짓말이 될 것이기 때문에 올바른 절차가 있는지 알고 싶습니다...

  • 변경된 저장소 백업
  • git reset --hard
  • git checkout right-branch
  • 변경 사항 복원
  • git commit -m "changes"

사용자가 얼마나 멀리 있는지, 원하는 분기에 따라 다양한 방법이 있습니다.

고전적인 실수를 해 보겠습니다.

$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop

그래서 이제 당신은 아직 약속하지 않은 이러한 변화를 원합니다.master나오다develop.

  1. 만약 당신이 가지고 있지 않다면.develop하지만, 그 방법은 사소한 것입니다.

    $ git checkout -b develop
    

    그러면 새 항목이 생성됩니다.develop당신이 지금 어디에 있든지 시작하는 지점.이제 당신은 커밋할 수 있고 새로운 것들은 모두 켜집니다.develop.

  2. 당신은 가지고 있습니다.developGit가 아무것도 하지 않고 전환할 수 있는지 확인합니다.

    $ git checkout develop
    

    이것은 성공하거나 불평할 것입니다.만약 성공한다면, 좋습니다!그냥 커밋.그렇지 않은 경우(error: Your local changes to the following files would be overwritten ...), 당신은 여전히 많은 선택권을 가지고 있습니다.

    가장 쉬운 것은 아마도git stash(클릭하기 전에 저를 이긴 다른 모든 응답자들이 말했듯이).달려.git stash save또는git stash push아니면1 그냥 평범함.git stash의 줄임말로save/push:

    $ git stash
    

    이것은 이상한 비브랜치 방식을 사용하여 코드를 커밋합니다(네, 실제로는 일부 커밋합니다).여기서 수행하는 커밋은 분기에 "있는" 커밋이 아니라 저장소에 안전하게 저장되므로 분기를 전환한 다음, 다음과 같이 "적용"할 수 있습니다.

    $ git checkout develop
    Switched to branch 'develop'
    $ git stash apply
    

    모든 것이 잘 되고 결과가 마음에 든다면, 당신은 그때 해야 합니다.git stash drop저장고이렇게 하면 분기가 아닌 이상한 커밋에 대한 참조가 삭제됩니다.(이러한 파일은 여전히 저장소에 있으며, 때때로 비상시에 검색할 수 있지만 대부분의 경우 해당 시점에서 삭제된 것으로 간주해야 합니다.)

applystep은 Git의 강력한 기본 병합 기계를 사용하여 저장된 변경사항을 병합합니다. 이는 분기 병합을 수행할 때 사용하는 것과 같은 종류입니다.즉, 실수로 작업 중인 분기가 작업 중인 분기와 충분히 다를 경우 "합병 충돌"이 발생할 수 있습니다.따라서 Git 자체가 병합 충돌을 감지하지 않았더라도 스택이 깨끗하게 적용되었다고 가정하기 전에 결과를 주의 깊게 검사하는 것이 좋습니다.

많은 사람들이 사용합니다.git stash pop에 대한 간략한 설명입니다.git stash apply && git stash drop그것은 문제가 되지 않지만, 애플리케이션이 엉망이 되어 이 길을 따라 계속 진행하지 않기로 결정하면 쉽게 재고를 되찾을 수 없다는 것을 의미합니다.그래서 따로따로 하는 것을 추천합니다.apply 검사결과,drop만족하는 경우에만(물론 이것은 또 다른 커피 휴식을 취하고 하던 것을 잊고 돌아와 잘못된 일을 할 수 있는 또 다른 지점을 소개합니다. 따라서 완벽한 치료법은 아닙니다.)


1savegit stash save새 저장소를 생성하기 위한 이전 동사입니다.13은 Git 전 2.13과 좀 더 했습니다.pop생성 명령에 추가 옵션을 추가합니다.Git 버전 2.16은 공식적으로 오래된 동사를 폐지했습니다(아직 Git 2.23에서 작동하지만 이는 내가 이것을 편집하고 있는 시점의 최신 릴리스입니다).

깃대 사용

git stash

변경 사항을 스택에 푸시합니다.원래대로 되돌리고 싶을 때 사용합니다.

git stash apply

개별 아이템을 꺼낼 수도 있습니다.

저장소를 완전히 날려버리려면:

git stash drop

사용할 수 있는 항목:

  1. git stash 당신의 일을 저장하기 위해
  2. git checkout <your-branch>
  3. git stash apply 또는 git stash pop 마지막 작품을 싣기 위해

Gitstash는 다른 분기에서 작업을 수행하는 동안 실행되지 않거나 지저분한 작업을 일시적으로 저장하려는 경우 매우 유용합니다.

Git-stash 문서

  • git stash 않은 내용을 하려면 다음과 같이 .
  • git stash list 않은 합니다.
  • git stash apply stash@{x}는 0는 x여 0,1,2... . 만든 스택의 수가 아닙니다.

사용할 수 있습니다.--merge/-m git checkout 옵션:git checkout -m <another-branch>

-m --slots

분기를 전환할 때 현재 분기와 전환 중인 분기 간에 다른 하나 이상의 파일에 대한 로컬 수정사항이 있는 경우 이 명령은 상황에 맞는 수정사항을 보존하기 위해 분기 전환을 거부합니다.그러나 이 옵션을 사용하면 현재 분기, 작업 트리 내용 및 새 분기 간의 3방향 병합이 완료되고 새 분기에 있게 됩니다.

출처: https://git-scm.com/docs/git-checkout

다음 중 하나를 수행할 수 있습니다.

  • 사용하다git stash를 보류하기 위해 또는 경변사보류거나하항을,,나▁to,

  • 다른 분기를 만들고 변경사항을 커밋한 다음 해당 분기를 작업 디렉토리에 병합합니다.

언급URL : https://stackoverflow.com/questions/22082307/git-switch-branch-without-discarding-local-changes