2012-03-07 1 views
48

제목에서 알 수 있듯이 git merge --squashgit merge --no-commit의 차이점은 분명하지 않습니다.Git merge --squash와 --no-commit의 차이점

git merge에 대한 도움말 페이지를 이해하는 한, 두 명령 모두 나를 편집하고 마지막 커밋 (또는 여러 커밋)을 수행 할 수있는 업데이트 된 작업 트리에 남겨 둡니다.

누군가 2 가지 옵션의 차이점을 분명히 할 수 있습니까? 언제 다른 하나 대신 하나를 사용합니까?

답변

65
git merge --no-commit 

이것은 일반적인 병합과 같지만 병합 - 커밋을 생성하지 않습니다. 이 커밋은 병합 커밋이 될 것입니다 : 히스토리를 보면 커밋은 정상적인 병합으로 나타납니다.

git merge --squash 

이렇게하면 변경 내용이 병합 커밋을 만들지 않고 작업 트리에 병합됩니다. 병합 된 변경 사항을 커밋하면 분기에서 병합 커밋없이 새로운 "정상"커밋처럼 보입니다. 병합 된 모든 변경 사항을 체리 피크로 처리 한 것과 거의 같습니다.

+0

그래서 병합 커밋은 어떻게 역사에 나타 났습니까? 커밋 메시지를 편집 할 수 있기 때문에 병합 커밋이라는 것을 어떻게 알 수 있습니까? – quaylar

+2

@quaylar 병합 커밋은 다중 커밋을 제외하고는 특별한 커밋이 아닙니다. 'git log --parents' (예를 들어,'git log --merges'는 그러한 커밋만을 보여줍니다)와 같이 커밋에 대한 부모를 볼 수 있습니다. –

+5

@PhilippWendler 그래서 본질적으로 병합 커밋을 통해 역사를 살펴보면이 커밋이 병합의 결과라는 것을 알 수 있습니다 (이 병합에 기여한 지점도 정보가 유지됩니까?). --squash를 사용하면이 커밋이 병합의 결과라는 것을 알 수 없습니다. 나는 그것을 정확하게 이해하고 있는가? – quaylar