나는 git을 처음 사용하고 스쿼시와 rebase의 차이점을 이해하려고합니다. 알다시피 리베이스를 할 때 스쿼시를 수행합니다.
답변
모두 git merge --squash와 git rebase --interactive“숙청”커밋 생성 할 수 있습니다. 
그러나 그들은 다른 목적으로 사용됩니다.
병합 관계를 표시하지 않고 대상 브랜치에서 스쿼시 커밋을 생성합니다. 
(참고 : 커밋을 즉시 생성하지는 않습니다 : 추가가 필요합니다 git commit -m "squash branch") 
소스 분기를 완전히 버리고 ( SO question 에서 가져온 스키마)에서 유용합니다 .
 git checkout stable
      X                   stable
     /
a---b---c---d---e---f---g tmp
에:
git merge --squash tmp
git commit -m "squash tmp"
      X-------------------G stable
     /
a---b---c---d---e---f---g tmp
그런 다음 tmp분기 를 삭제 합니다.
참고 : git merge이 --commit옵션을 있지만 사용할 수 없습니다 --squash. 없었다 결코 사용할 수 --commit와 --squash함께. 
Git 2.22.1 (2019 년 3 분기) 이후이 비 호환성이 명시 적으로 나타납니다.
Vishal Verma ( )의 commit 1d14d0c (2019 년 5 월 24 일)를 참조하십시오 . ( Junio C Hamano 에 의해 병합 – 커밋 33f2790 , 2019 년 7 월 25 일)reloadbrain
gitster  
merge: 쓰레기--commit와--squash이전에는
--squash공급시 ‘option_commit‘가 자동으로 삭제되었습니다. 이는--commit명시 적으로 스쿼시의 커밋 없음 동작을 무시하려고 시도한 사용자에게는 놀라운 일이 아닙니다 .
git/git builtin/merge.c#cmd_merge() 이제 다음이 포함됩니다 :
if (option_commit > 0)
    die(_("You cannot combine --squash with --commit."));
새로운 기반에서 커밋의 일부 또는 전부를 재생하여 스쿼시 (또는 최근에 “수정”,이 SO 질문 참조 )하여 다음으로 바로 이동합니다.
git checkout tmp
git rebase -i stable
      stable
      X-------------------G tmp
     /
a---b
모든 커밋을 스쿼시하기로 선택한 경우 tmp(와 반대로 merge --squash일부를 재생하고 다른 스쿼시를 선택할 수 있습니다).  
차이점은 다음과 같습니다.
- squash소스 분기 (- tmp여기)를 건드리지 않고 원하는 곳에 단일 커밋을 만듭니다.
- rebase다음을 사용 하여 동일한 소스 분기 (여전히- tmp) 를 진행할 수 있습니다 .- 새로운 기지
- 더 깨끗한 역사
 
답변
커밋 병합 : 브랜치에서 모든 커밋을 유지하고 기본 브랜치에서 커밋으로 인터리브
스쿼시 병합 : 변경 사항은 유지하지만 기록에서 개별 커밋을 생략합니다.
Rebase : 이렇게하면 전체 기능 분기가 마스터 분기의 끝에서 시작하여 마스터에 모든 새로운 커밋을 효과적으로 통합합니다.
여기에 더
답변
스쿼시 병합은 트리 (일련의 커밋)를 단일 커밋으로 병합합니다. 즉, n 확약 에서 작성된 모든 변경 사항을 단일 확약으로 스쿼시 합니다 .
Rebasing은 re-basing, 즉 트리에 대한 새로운 기본 (부모 커밋)을 선택하는 것입니다. 아마도 이것에 대한 수은 용어는 더 분명 할 것입니다. 그들은 단지 그것을 이식이라고 부릅니다. 나무에 대한 새로운 근거를 선택합니다.
대화식 리베이스를 수행 할 때 리베이스하려는 커밋을 스쿼시, 선택, 편집 또는 건너 뛸 수있는 옵션이 제공됩니다.
그 희망은 분명했다!
답변
다음 예제로 시작하겠습니다.
이제 기능 분기의 변경 사항 을 마스터 분기 로 병합하는 3 가지 옵션이 있습니다 .
- 
커밋 병합 기능 분기 
 의 모든 커밋 기록을 유지 하고 마스터 분기 로 이동합니다
 . 더미 커밋이 추가됩니다.
- 
Rebase and merge 마스터 브랜치 앞의 기능 브랜치 
 의 모든 커밋 히스토리를 추가합니다
 . 더미 커밋을 추가하지 않습니다.
- 
스쿼시 및 병합 
 Will은 모든 기능 분기 커밋을 하나의 커밋으로 그룹화 한 다음 마스터 분기 앞에 추가합니다
 . 더미 커밋이 추가됩니다.
아래에서 마스터 브랜치 가 각 브랜치 를 어떻게 관리하는지 확인할 수 있습니다 .
모든 경우에 : 기능 분기를
안전하게 삭제할 수 있습니다 .