2013-05-26 5 views
66

나는 (! 그것은 굉장) 잠시 동안 지금 망할 놈의 확장를 사용하고 있지만 다음에 간단한 대답을 발견하지 않은 : 커밋 메시지를 입력 할 때Git/Git Extension의 "squash"와 "fixup"의 차이점은 무엇입니까?

때때로, A는 오타를 확인합니다.

마우스 오른쪽 단추로 클릭 한 커밋> 고급> 오류 복구에

enter image description here

가 그럼 난 단순히을 확인 커밋 : 내 친구가 어떻게 그것을 (망할 놈의 작업 확장)에 다음과 같은 방법으로 문제를 해결하는 나에게 보여 주었다 상자 "수정"및 내 메시지를 다시 작성하고 짜잔! 커밋 메시지가 수정되었습니다.

그러나이 다른 옵션 "Squash commit"... 나는 항상 그것이 무엇을하는지 궁금해하던가요?!

내 질문은 :

사람은 단순히 및 오류 복구가 힘내/힘내 작업 확장을을 확약 스쿼시 사이의 정확한 차이는 무엇인가 나를 설명 할 것인가? enter image description here enter image description here

답변

85

내가 망할 놈의 확장이 구체적으로 무엇을하는지 모르겠지만, 자식 REBASE은 자동 스쿼시 또는 오류 복구 옵션 스쿼시와 커밋이있다 : 그들은 ... "유사한" 나에게 가지 봐! 또는 픽업! 각각 접두사 :

--autosquash, --no-autosquash 
     When the commit log message begins with "squash! ..." (or "fixup! 
     ..."), and there is a commit whose title begins with the same ..., 
     automatically modify the todo list of rebase -i so that the commit 
     marked for squashing comes right after the commit to be modified, 
     and change the action of the moved commit from pick to squash (or 
     fixup). 

스쿼시 및 오류 복구의 차이는 오류 복구 작업이 원본 메시지를 유지합니다 반면 REBASE 동안, 스쿼시 작업, 원본과 스쿼시 커밋의 메시지를 결합하라는 메시지를 표시하는 것입니다 픽스 업 커밋에서 메시지를 버립니다.

+4

[rebase] 및 squash/fixup에 대한 자세한 내용은 [The Git docs] (http://git-scm.com/docs/git-rebase)에서 볼 수 있습니다. –

+0

이것은 훌륭한 대답입니다. 왜 내가 커밋 메시지를 가져 왔는지 궁금해. –

39

일련의 커밋을 리베이스 할 때 각 커밋이 squash으로 표시된 경우 간단하게 말해서 pick 또는 reword 커밋 메시지의 일부로 해당 메시지를 사용할 수 있습니다.

fixup을 사용하면 해당 커밋의 메시지가 삭제됩니다. git-rebase doc에서

9

:

당신은 하나에 두 개 이상의 커밋을 배 명령이 "스쿼시"또는 "오류 복구"와 두 번째 이후 커밋은 "선택"교체 할 경우

. 커밋에 다른 작성자가있는 경우 접힌 커밋은 첫 번째 커밋의 작성자에게 할당됩니다. 접힌 된 커밋에 대한 제안 된 커밋 메시지는 첫 번째 커밋의 커밋 메시지와 "squash"커밋의 커밋 메시지를 연결하지만 "fixup"명령으로 커밋 메시지 커밋을 생략합니다.

0

나는 git 확장 기능을 사용하여 많은 커밋을 스쿼시하게 만들지 못했습니다.이를 위해, 나는 명령 줄에 의지했고, this post 도움이

git rebase -i Head~2 

이것은 대화 형 REBASE를 발견, 다음과 같은주의 :

여기
  • ~ 2 당신이 원하는 커밋 얼마나 많은 의미를 현재 헤드를 포함하여이 작업에 포함됩니다.
  • 하위 상호 작용 편집 창을 편집하고 첫 번째 항목을 "pick"으로두고 후속 줄을 "squash"로 바꿔야합니다. 위의 링크의 지시 사항이 불투명 할 경우 훨씬 명확합니다.