힘내에서 다음을 어떻게 할 수 있습니까?
현재 지점은 branch1이며 로컬로 변경했습니다. 그러나 이제는 실제로 이러한 변경 사항을 branch2에 적용하려고한다는 것을 알고 있습니다. 이러한 변경 사항을 branch1에서 커밋하지 않고 branch2에서 로컬 변경 사항이되도록 적용 / 병합하는 방법이 있습니까?
답변
파일이 아직 커밋되지 않았기 때문에 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
답변
스 태싱, 임시 커밋 및 리베이스는 모두 과도 할 수 있습니다. 변경된 파일을 색인에 아직 추가하지 않은 경우 다른 분기를 체크 아웃 할 수 있습니다.
git checkout branch2
편집하는 파일이 branch1과 branch2간에 다르지 않는 한 작동합니다. 작업 변경 사항이 보존 된 상태에서 branch2로 이동합니다. 서로 다른 경우에는 로컬 변경 사항 -m
을 체크 아웃 옵션으로 분기를 전환하여 도입 된 변경 사항과 병합하도록 지정할 수 있습니다 .
git checkout -m branch2
색인에 변경 사항을 추가 한 경우 먼저 재설정하여 이러한 변경 사항을 실행 취소해야합니다. 이렇게하면 작업 복사본이 보존되고 단계적 변경 사항 만 제거됩니다.
git reset
답변
앞에서 언급 한 숨김 방법에 대한보다 짧은 대안은 다음과 같습니다.
변경 사항을 임시로 임시로 이동하십시오.
git stash
새 브랜치를 작성하고 새 분기로 전환 한 다음 한 단계만으로 스 태쉬를 팝하십시오.
git stash branch new_branch_name
그럼 그냥 add
하고 commit
새로운 브랜치로 변경됩니다.
답변
경고 : 자식 초보자에게는 해당되지 않습니다.
이것은 거의 새로운 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이다.
답변
커밋 된 변경에 관한 것이면 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
.