2011-12-27 3 views
43

GitHub에서 git 저장소를 복제하고 일부 변경 사항을 적용하고 일부 커밋했습니다. 나는 꽤 많이 만들었고 모두 더러워서 풀 요청에 적합하지 않습니다. 이제 origin/master 지점에서 cleanchanges 브랜치를 만들었으므로 깨끗합니다. 좋은 커밋 코멘트를 사용하여 변경 사항을 커밋하고 싶습니다. 내가 로컬 마스터 오전 때작업 영역 파일을 변경하지 않고 다른 분기로 전환

, 내 cleanchanges에 있지만 파일을 변경하지 않고 전환하려는. 그런 다음 커밋 할 수 있습니다.

어떻게 파일을 변경하지 않고 분기를 전환 할 수 있습니까?

나는 분명히 만들고 싶어 : 나는 로컬 master에 최선을 다하고 모든 변경 사항을 가지고있다. 커밋되지 않은 변경 사항은 없습니다.

답변

45

편집 : 나는 당신이 이미 커밋을 만들었다 고 말한 것으로 나타났습니다. 이 경우, 하나의 커밋 할 git merge --squash를 사용

git checkout cleanchanges 
git merge --squash master 
git commit -m "nice commit comment for all my changes" 

(편집 :. 당신이 커밋되지 않은 변경이있는 경우 다음과 같은 대답이 적용)

그냥 git checkout cleanchanges와 가지를 전환합니다. 브랜치가 동일한 ref를 참조하면 전환 할 때 모든 커밋되지 않은 변경 사항이 작업 디렉토리에 보존됩니다.

유일한 차이점은 저장소에있는 일부 파일이 origin/mastercleanchanges 사이에 다른 경우입니다. 방금 지점을 만들었다면 아무런 문제가 없습니다.

항상 직장을 잃을 염려가있는 경우 먼저 백업 사본을 만드십시오. 힘내는 먼저 묻지 않고 일을 버리지 않도록 설계되었습니다.

+0

다른 지점으로 전환합니다. – amorfis

+0

그런 경우 내 업데이트 된 답변을 참조하십시오. –

6

가장 좋은 방법은 변경 및 스위치 분기 stash입니다. 분기를 변경하려면 깨끗한 상태가 필요합니다. 그래서 그들을 숨겨서 새로운 지사를 체크 아웃하고 새로운 지사에 변경 사항을 적용하고 커밋하십시오.

+2

브랜치를 전환 할 때 반드시 "클린 상태"가 필요하지는 않습니다. –

+0

변경 사항은 이미 커밋 된 것입니다. – amorfis

+1

그런 다음 다른 분기의 변경 사항을 병합 할 수 있습니다. – vivek85

1

변경 사항을 적용하고 변경 사항을 마스터하고 커밋해야합니다.

는 그렇다면, 당신은 커밋을 하나의로를 부수, 커밋을 rebase 싶다.

내가 정확히 당신이 원하는 것을 완전히 확실하지 않다, 그래서 스크립트 당신을 유혹하지 않을거야. 그러나 나는 당신이 git rebase 및 "스쿼시"ing에 대한 옵션을 읽고 몇 가지 시도해 보길 권합니다.

1

또 다른 방법, 새 대신 병합을 수행하는 커밋 만들려면 :

git checkout cleanchanges 
git reset --hard master 
git reset cleanchanges 

git status 
git add . 
git commit 

첫 번째 (하드) 리셋 master에 마지막 커밋과 동일하게하여 작업 트리를 설정합니다. 그것은 cleanchanges 브랜치의 끝을 가리키는하지만, 어떤 파일을 변경하지 않고, 어디

두 번째 다시는 머리를 돌려 놓을 것입니다. 이제는 추가하고 커밋 할 수 있습니다.당신은 당신이 master에서 커밋 더러운를 제거하려면


는 그 후, (그리고 가정 이미 그들을 밀어하지 않은 경우) 당신은 할 수 : 이것은 모든 새 커밋을 삭제합니다

git checkout master 
git reset --hard origin/master 

, 로컬 master 브랜치를 리포지토리의 커밋과 동일한 커밋으로 반환합니다.

21

힘내. 나는 모든 변경 사항이 최선을 다하고있다

git checkout branch_name 
+11

이렇게하면 추적 할 수없는 파일을 제외한 작업 영역 파일이 변경됩니다. – SMR

+0

aregato gonsaymasu. 고맙습니다. –