IT박스

로컬 변경 사항을 버리지 않고 git switch branch

itboxs 2020. 6. 14. 11:12
반응형

로컬 변경 사항을 버리지 않고 git switch branch


자, 언젠가 우리는 많은 수정을하게되었고, 우리가 그것들을 커밋 할 때 우리는 잘못된 브랜치에서 일하고 있음을 알 수 있습니다.

로컬 변경 사항을 버리지 않고 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. 당신 이 할develop. Git이 아무것도하지 않고 전환 할 수 있는지 확인하십시오.

    $ git checkout develop
    

    이것은 성공하거나 불평 할 것입니다. 성공하면 훌륭합니다! 커밋하십시오. 그렇지 않은 경우 ( error: Your local changes to the following files would be overwritten ...) 여전히 많은 옵션이 있습니다.

    가장 쉬운 방법 일 것입니다 git stash(클릭하는 것에 대해 다른 모든 응답자가 post말했듯이). git stash save또는 git stash push, 1 또는 /에 git stash대한 간단한 일반 실행하십시오 .savepush

    $ git stash
    

    이것은 이상한 non-branch-y 메소드를 사용하여 코드를 커밋합니다 (예, 실제로 커밋합니다). 커밋은 어떤 브랜치 "on"이 아니라 이제 리포지토리에 안전하게 저장되므로 이제 브랜치를 전환 한 다음 스 태쉬를 "적용"할 수 있습니다.

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

    모든 것이 잘되고 결과가 마음에 git stash drop들면 숨겨야합니다. 이것은 이상한 non-branch-y commit에 대한 참조를 삭제합니다. (그들은 여전히 ​​저장소에 있으며 때로는 비상 사태에서 검색 할 수 있지만 대부분의 경우 해당 시점에 사라 졌다는 것을 고려해야합니다.)

apply단계는 Git의 강력한 기본 병합 기계를 사용하여 분기 병합을 수행 할 때 사용하는 것과 같은 종류의 숨김 변경 사항을 병합합니다. 이는 실수로 작업중인 지점이 작업하려는 지점과 충분히 다른 경우 "병합 병합"을 얻을 수 있음을 의미합니다. 따라서 Git 자체가 병합 충돌을 감지하지 않더라도 숨김이 깨끗하게 적용되었다고 가정하기 전에 결과를주의 깊게 검사 하는 것이 좋습니다 .

많은 사람들 git stash pop이의 약자를 사용 합니다 git stash apply && git stash drop. 괜찮아도 응용 프로그램이 엉망이 되어이 경로를 진행하지 않기로 결정하면 쉽게 숨길 수 없다는 것을 의미합니다. 그래서 만족할 경우에만 별도의 apply, 결과를 검사하는 것이 좋습니다 drop. (물론 이것은 또 다른 커피 휴식을 취하고하고 있던 일을 잊고, 돌아와서 잘못된 일을 할 수있는 또 다른 요점을 소개 하므로 완벽한 치료법은 아닙니다.)


1save 에서이 git stash save새로운 은닉을 만들기위한 기존의 동사입니다. Git 버전 2.13은 새로운 동사를 도입하여 일관된 일관성을 유지 pop하고 작성 명령에 더 많은 옵션을 추가했습니다. Git 버전 2.16은 이전 동사를 공식적으로 더 이상 사용하지 않습니다 (여전히 편집 할 때 최신 릴리스 인 Git 2.23에서 작동하지만).


자식 숨김 사용

git stash

변경 사항을 스택으로 푸시합니다. 다시 사용하고 싶을 때

 git stash apply

개별 항목을 꺼낼 수도 있습니다. 은신처를 완전히 날려 버리려면 :

 git stash clear

  • git stash 커밋되지 않은 변경 사항을 저장
  • git stash list 저장된 커밋되지 않은 스 태쉬를 나열
  • git stash apply stash@{x} 여기서 x는 0,1,2 ..가 될 수있는 스 태쉬 수 없습니다.

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

  • 사용 git stash또는 변경을 보류하는,

  • 다른 브랜치를 만들고 변경 사항을 커밋 한 다음 해당 브랜치를 작업 디렉토리에 병합하십시오.

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

반응형