2016-06-07 1 views
2

커밋없이 내 단계별 변경 사항을 유지하고 이러한 변경이 필요하지 않은 다른 문제에 어떻게 대처할 수 있습니까?계속해서 변경된 내용을 유지 하시겠습니까?

나는 지점 b1을 작성하고 일부 변경을 수행하여 변경 사항을 준비했습니다. 이제는 작업해야하는 긴급한 문제가 있었지만 여기서 단계별로 변경하지 않아도됩니다. 그래서 나는 지점 b2로 전환하여 업스트림에서 가져 와서 가져 왔습니다. 그러나 단계별 변경 사항은 여전히 ​​b2 지점에 있습니다.

답변

4

변경하지 말고 stash 변경 사항이 있습니다. 그런 다음 나중에 작업 복사본을 다시 적용 할 수 있습니다 :

git stash 
git checkout -b urgent-issue 
git commit 
git checkout - 
git stash pop 
+2

참고 * 자식 stash'가 만드는'두 개의 * 일시 커밋 (어느 쪽도 아니 어떤 지점에 있습니다) : 하나 즉, 현재 인덱스를 포함, 당신이 지금 개최 있고, 다른 하나는 현재의 작업을 포함 무엇이든 포함 즉, 당신이 공연하지 않은 것을 포함합니다. stash를 다시 넣으려면'git stash apply --index' 나'git stash pop --index'를 사용하여 단계적 상태와 단계적 상태를 따로 따로 복구 할 수 있습니다. (필자는'--index'를 잘못 입력했기 때문에 항상'apply'를 사용하고'apply'를 사용하면 올바른 철자로 다시 시도 할 수 있습니다.) – torek

+0

감사합니다. 잘 했어! – Subhash

2

@knittl에 의해 주어진 답에 대한 대안은 실제로 가서 (계속 읽기)을 일시적으로 커밋하는 것입니다 :

git commit -m 'WIP' 
git checkout urgent-issue 

작업을 커밋하면 작업 디렉토리가 깨끗 해지고 필요에 따라 분기를 전환 할 수 있습니다. 현재 브랜치로 돌아가고 싶으면 작업을 계속하고 임시 커밋을 수정할 수 있습니다.

git checkout feature # return to original branch 
# work work ... complete the commit 
git commit --amend -m 'Finished the work I started earlier' 

나는 여러 가지 이유로 중요한 작업을 할 때 일반적으로 숨겨진 것보다 임시 커밋을 선호합니다. 첫째, stash 스택을 통해 정렬해야하는 필요성을 제거하여 적용 할 숨김을 찾습니다 (스택을 오래된 쓰레기와 쉽게 쌓아두기 쉽습니다). 둘째, 내가 끝내지 않은 일을 저질렀다는 것을 알기 때문에, 필자는이 일을 끝내기 위해 훈련을 강요한다.

+1

'git reset --soft HEAD ^'(아이템을 스테이지 유지) 또는'git reset --mixed HEAD ^'(unstages)를 사용하여 이전 상태로 돌아갈 수도 있습니다. 'git stash '를 사용하면 얻을 수있는 장점은 * 2 * 임시 커밋이된다는 것입니다. knittl의 답변에 덧붙이고 싶은 코멘트를보십시오. – torek

+0

@torek 답변에서보다 귀하의 의견을 통해 많은 것을 배웠습니다. –

+1

BTW 임시적인 커밋 방법이 일반적으로 선호되는 경우가 있습니다. 일부 상황에서는 git stash를 사용합니다. 그러나'git stash'는 성가신 버그가 있습니다 : 만약 당신이 변경을 추가 (스테이지)한다면, 같은 파일의 작업 트리 버전이 그 파일의 HEAD 버전과 일치하도록 만듭니다.'git stash apply --index' * 복원 작업 트리에 대한 파일 *의 잘못된 버전. 이 버그를보고하고 몇 년 전 Git 메일 링리스트에서 수정을 제안했지만 아무도 그 문제를 고치지 않았습니다. – torek

0
# No need to stage 
# put your current changes in stash 
git stash 

# create and checkout to b1 branch 
git checkout -b b2 

# resolve urgent issue and push changes 

# now get back to branch b1 
git checkout b1 

# Apply stashed changes back 
git stash pop 
관련 문제