답변:
파일이 아직 커밋되지 않았기 때문에 branch1
:
git stash
git checkout branch2
git stash pop
또는
git stash
git checkout branch2
git stash list # to check the various stash made in different branch
git stash apply x # to select the right one
주석으로 하여 benjohn (참조 git stash
매뉴얼 페이지 )
현재 추적되지 않은 (새로 추가 된) 파일을 숨기려면 인수를 추가하십시오
-u
.
git stash -u
-u
그래서 : git stash -u
.
스 태싱, 임시 커밋 및 리베이스는 모두 과도 할 수 있습니다. 변경된 파일을 색인에 아직 추가하지 않은 경우 다른 분기를 체크 아웃 할 수 있습니다.
git checkout branch2
편집하는 파일이 branch1과 branch2간에 다르지 않는 한 작동합니다. 작업 변경 사항이 보존 된 상태에서 branch2로 이동합니다. 서로 다른 경우에는 로컬 변경 사항 -m
을 체크 아웃 옵션으로 분기를 전환하여 도입 된 변경 사항과 병합하도록 지정할 수 있습니다 .
git checkout -m branch2
색인에 변경 사항을 추가 한 경우 먼저 재설정하여 이러한 변경 사항을 실행 취소해야합니다. 이렇게하면 작업 복사본이 보존되고 단계적 변경 사항 만 제거됩니다.
git reset
checkout -m
어떤 상황 (어쩌면 병합 충돌을 야기)의 "안전"아니다, (예를 들어, 당신이 숨겨 놓은 팝업을 unpop 수 있습니다) 어떤 이점을 제공 숨길 것인가?
.orig
? 로 백업되지 않습니까?
경고 : 자식 초보자에게는 해당되지 않습니다.
이것은 거의 새로운 git 명령을 작성하려고 시도한 워크 플로우에서 충분히 나타납니다. 일반적인 git stash
흐름은가는 방법 이지만 조금 어색합니다. 나는 보통 이후 새로운 먼저 커밋 수 있도록 , 모든 정보가 내 마음에 신선한 나는 변화에서 찾고있는 경우 그것은 단지 시작에 더 나은 git commit
내가 작업하는 동안 발견 것을 마스터에 속하는 (일반적으로 버그 수정을 발견 한 것은 -ing 기능 지점) 즉시.
이와 같은 상황에 처한 경우 항상 현재 작업중인 디렉토리 와 함께 다른 작업 디렉토리 를 가지면 도움이
master
됩니다.
그래서 이것을 달성하는 방법은 다음과 같습니다.
git commit
좋은 커밋 메시지와 함께 즉시 변경 사항.git reset HEAD~1
현재 브랜치에서 커밋을 취소합니다.때로는 나중에 (비동기 적으로) 또는 다른 터미널 창에서 즉시 :
cd my-project-master
동일한 WD를 공유하는 또 다른 WD입니다 .git
git reflog
방금 만든 버그 수정을 찾을 수 있습니다.git cherry-pick SHA1
커밋의.선택적으로 (아직 비동기식) 기능 분기를 리베이스 (또는 병합)하여 일반적으로 PR을 제출하려고하고 기능 분기 및 WD를 이미 정리할 때 버그 수정을 얻을 수 있습니다.
cd my-project
내가 작업중인 주요 WD입니다.git rebase master
버그 수정.이렇게하면 중단없이 기능에 대한 작업을 계속할 수 있으며 git stash
전에 아무것도하지 않거나 WD를 정리 해야 할 필요가 없으며 git checkout
(그리고 기능 분기를 다시 확인해야 함) 여전히 모든 버그 수정이 master
대신 수행됩니다. 기능 지점에 숨겨져 있습니다.
IMO git stash
및 git checkout
일부 큰 특징 작업의 중간에있을 때 진정한 PIA이다.
my-project-master
같은 공유 .git
그것 같은 소리 차종을. 왜 git checkout -b bugfixABC; git commit -a; git reset HEAD^ --hard
, 나중에 (비동기)에있는 동안 master
, git cherry-pick <SHA1 of the commit(s) in bugfixABC
? (또는 심지어 git rebase --onto master feature bugfixABC
현재있는 지점에서 SHA1을 찾지 않아도됩니다 . 즉, git reset
위에있는 직후에 할 수 있습니다 feature
.)
checkout -m
. 이 경우 더 좋습니다.
커밋 된 변경에 관한 것이면 git-rebase를 살펴 봐야하지만 VonC의 의견에서 지적했듯이 로컬 변경에 대해 이야기 할 때 git-stash가 확실히 좋은 방법입니다.
지금까지 제공된 답변은 병합 충돌을 해결하는 많은 불필요한 작업이 필요하거나 종종 잘못된 가정을 너무 많이하기 때문에 이상적이지 않습니다. 이것이 완벽하게 수행하는 방법입니다. 내 사이트로 연결되는 링크입니다.
의 모든 변경 사항을 커밋하지 않고 커밋 my_branch
하려는 커밋되지 않은 변경 master
사항이 있습니다 my_branch
.
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
master
어쨌든 결국에는 지점 을 병합 해야합니다. 이제는 충돌을 해결하기 가장 좋은시기입니다.
-u
옵션 (일명 --include-untracked
에서) git stash -u
나중에 수행 할 때 비 추적 파일을 잃고에서 방지 당신이 git clean -f -d
내 master
.
후 git checkout master
당신이하지 않는 것이 중요하다 git stash pop
나중에이 숨겨 놓은 필요하므로. 에서 만든 숨겨 놓은 팝업 경우 my_branch
다음을 수행 git stash
에서 master
, 당신은 당신이 나중에에 그 은닉을 적용 불필요한 병합 충돌을 일으킬 것입니다 my_branch
.
git reset
의 결과로 모든 단계를 해제 git stash apply
합니다. 예를 들어, 숨김 파일에서 수정되었지만 존재하지 않는 파일 master
은 "삭제 된 파일"충돌로 준비됩니다.
git checkout .
그리고 git clean -f -d
최선을 다하고되지 버린 모든 : 추적 파일에 대한 모든 변경 및 모든 비 추적 파일과 디렉토리. 그것들은 이미 숨김 상태에 저장되어 있으며로 남아 master
있으면로 전환 할 때 불필요한 병합 충돌이 발생할 수 있습니다 my_branch
.
마지막 git stash pop
은 원본을 기반으로 my_branch
하므로 병합 충돌이 발생하지 않습니다. 그러나 stash에 마스터하려는 커밋되지 않은 파일이 포함되어 있으면 git은 "스 태쉬에서 추적되지 않은 파일을 복원 할 수 없습니다"라고 불평합니다. 이 충돌을 해결하려면 작업 트리, 다음에서 해당 파일을 삭제 git stash pop
, git add .
하고 git reset
.