2011-11-21 3 views
23

가능한 중복을 커밋을 부수의 간단한 방법 :
How can I squash my last X commits together using git?힘내 : 마스터

내가 GitHub의에서 호스팅 프로젝트를 가지고 있고 로컬 복제가 있습니다. GitHub에 이미 밀어 넣은 작은 커밋이 있습니다. 이 작업은 모두 기본 * master 분기를 사용하여 수행되었습니다.

병합 - 스쿼시와 rebase 등에서 혼란스러워졌습니다. GitHub을 밀어 올리도록 한 커밋에 여러 개의 내역 커밋을 결합하는 가장 간단한 방법은 무엇입니까?

답변

43

시작하기 전에 작업을 손실하지 않으려면 git status이 깨끗한 지 (즉, 해당 명령의 출력이 없음) 확인해야합니다. 당신이 원하는 것을 할 수있는 가장 간단한 방법은 아마도 :

git reset --soft <LAST-COMMIT-THAT'S-OK> 
git commit -m 'Many squashed commits' 
git push --force origin master 
당신이이 것을 명심해야

역사를 다시 쓰기 (당신이 git push--force 옵션이 필요 그 이유는) 그래서 다른 사람이 복제 수도 경우이 작업을 피해야한다 또는 저장소에서 가져온 것입니다.

+2

(고속에만 전달) : 좀 더 대안은이 질문의 답변을 참조? – Gabe

+1

@whoami : 누군가 다른 사람이 그 지점을 잡아 당기면'(강제 업데이트)'를 볼 것이고 자식은 지점 업데이트를 거부 할 것입니다. 그런 다음 (a) 모든 작업이 커밋되고 (b) 일반적으로 rebase (예 :'git rebase origin/master')하거나 지점을 원격 업데이트 지점 버전으로 재설정해야합니다. 예를 들어'git reset --hard origin/master'). 당신이 사람들에게 무엇을해야 할지를 설명하는 것이 행복하지 않다면, 다시 쓰는 역사를 강요하지 않는 것이 가장 좋습니다. –

+0

그들 모두는 로컬 브랜치와 리모컨이 갈라 지거나 빨리 감기가 아닌 변경 사항을 병합해야한다는 것을 모두 알게 될 것입니다. –