git merge squash 및rebase
merge 형식(메모 대체)
mergepr 시 세 가지 선택
master 분기 모형
예를 들어, 만약 이 지점에 몇 개의commit가 있다면
그리고 또 새로운 지점을 세우고 몇 가지 약속을 개발했다. 그러면 전체적인 그림이 이렇게 된다.
일반 Merge
브랜치를 결합할 때 흔히 볼 수 있는 작업은 다음과 같다.
마스터 지점에 대한 checkout, 합병
:git merge devel
그리고 사용된 분기 삭제:git branch -D devel
push - 원격 브랜치:git push origin master
언뜻 보기에는 아무런 문제가 없지만, 실제로는 어떤 결과일까, 합병 전의 지점은 다음과 같다.작업 후
언뜻 보기에는 괜찮은데, 곧은commit선이고, devel 지점 내의 제출도 모두 마스터 지점에 기록되어 있지만, 도대체 이렇게 많은 제출을 기록할 필요가 있는가
예를 들어 만약에 수십 명이 참가한 대형 프로젝트가 하나를 수정하기 위해 약간의 실수로 몇 십 개의 약속을 홍보했고 merge에 의해 그 때 이 프로젝트의 역사 기록에 몇 십 개의 상관없는commit가 추가되었는데 매니저가 이걸 보면 곤혹스러울 것이다.그리고 몇 번 반복하면 롤백도 힘들어지겠죠.
squash merge
여러 개의commit를 하나로 합칠 때gitcommit-amend, 사용 후 자신의commit 이력을 확인할 수 있으며,pick선택,squash합병 등을 통해.마찬가지로merge때도 가능합니다. 단계는 두 개뿐입니다.
분기 전환
:git checkout master
squash 형식으로mergemerge:git merge --squash devel
이 때 마스터 지점에 제출하지 않은commit가 나타납니다. 주의해야 할 것은 자신의commit, 즉commit의author를 변경한 것입니다. 결과는 다음과 같습니다.일반적인merge보다 좋아요. 지금commit이 하나가 됐어요. 하위 지점이 아무리 그래도commit는 여기 하나밖에 없어요!
rebase merge
만약 합병하여 작가의 데이터를 남기고 싶다면, 리베이스를 사용하시오
먼저 devel 지점 체크아웃:
git checkout devel
중기: git rebase -i master
마스터 분기 반환:git checkout master
병합: git merge devel
두 번째 조작은 devel에서master를 참조하여 중기를 하는 것이다. 중기, 즉 두 개의 지점으로 이동하는 공동 조상은 현재의 지점에서 조상에서 현재의commit를 합병하기 때문에 두 번째 조작에서 이commit들의 처리 방법을 선택할 수 있다. 이때merge를master로 이동하면commit 기록도 하나만 남는다. 아래와 같다.현재commithistory가 좋아졌지만, 주의해야 할 것은 원래의commithistory를 바꾸려면 지점의 개발자가 스스로 다시 세워야 한다는 것이다
이 세 가지 방식을 비교하면 몇 가지 결론을 얻을 수 있다.
Reference
이 문제에 관하여(git merge squash 및rebase), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Syoitu/items/4c949231ca4a1be3c330텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)