대화 형 rebase를 수행하고 스쿼시하려는 커밋을 손으로 선택할 수 있습니다. 이것은 dev
브랜치의 히스토리를 다시 작성하지만,이 커밋을 푸시하지 않았기 때문에 자신의 컴퓨터에서 일어날 수있는 일 이외에 이것으로부터 어떠한 부정적인 여파도 있어서는 안됩니다. 와
시작 다음
git checkout dev
git rebase -i HEAD~6
이 당신에게 7 커밋의 다음 목록을 보여주는 dev
지점의 HEAD에서 다시 6 단계를가는 창을 표시해야합니다
pick 07c5abd message for commit A
pick dl398cn message for commit B
pick 93nmcdu message for commit C
pick lst28e4 message for commit D
pick 398nmol message for commit E
pick 9kml38d message for commit F
pick 02jmdmp message for commit G
위의 첫 번째 커밋 (A
위)은 이며 가장 오래된 숫자는이며 가장 최근의 커밋이 가장 최근의 것입니다. 기본적으로 각 커밋에 대한 옵션은 pick
입니다. 이제 리베이스를 마친 경우, 각 커밋을 그대로 유지할 수 있습니다. 실제로는 아무 작업도 수행하지 않습니다. 하지만 당신은 어떤 중간 커밋 스쿼시, 편집 및 이에 대한 목록을 변경하려면 이후 :
pick 07c5abd message for commit A
pick dl398cn new commit message for "H" goes here
squash 93nmcdu message for commit C
squash lst28e4 message for commit D
pick 398nmol message for commit E
pick 9kml38d message for commit F
pick 02jmdmp message for commit G
참고주의 깊게 위에서 무슨 일이 일어나고 있는지를. squash
을 입력하면 Git에게 그 커밋을 위의 위의 커밋과 병합하도록 알려주는 커밋 인 커밋을 즉각적으로 으로 커밋합니다. 그래서이 C
을 커밋 뒤쪽에 D
을 커밋 스쿼시, 다음 하나의 커밋 B
, C
및 D
커밋 당신을 떠나, B
에 C
스쿼시 말한다. 다른 커밋은 그대로 유지됩니다.
파일을 저장하고 (Windows의 경우 Git Bash에서는 : wq) 리베이스가 완료되었습니다. 예상대로 병합 충돌을 얻을 수는 있지만 병합 문제를 해결하는 데 특별한 것은 없으며 정기적 인 리베이스 또는 병합과 마찬가지로 계속 수행 할 수 있습니다.
당신이 REBASE 후 지점을 검사하는 경우, 당신은 E
, F
및 G
지금이 커밋이 실제로 새로운 커밋에 의해 대체되었습니다 때문이다 등 새로운 해시, 날짜를 가지고 커밋 알 수 있습니다. 그 이유는 기록을 다시 작성했기 때문에 일반적인 커밋은 더 이상 이전과 같을 수 없기 때문입니다.
[Git을 푸시하기 전에 여러 커밋 결합하기] 가능한 복제본 (http://stackoverflow.com/questions/6934752/combining-multiple-commits-before-pushing-in-git) –