원격 Git 서버가 있습니다. 수행하려는 시나리오는 다음과 같습니다.
-
각 버그 / 기능마다 다른 Git 브랜치를 만듭니다.
-
비공식 Git 메시지가있는 Git 브랜치에서 코드를 계속 커밋합니다.
-
최상위 저장소에서 공식 Git 메시지를 사용하여 하나의 버그에 대해 하나의 커밋을 수행해야합니다.
그렇다면 모든 체크인에 대해 단 하나의 커밋을 얻도록 분기를 원격 분기로 병합하려면 어떻게해야합니까 (이 커밋 메시지를 제공하고 싶습니다)?
답변
버그 수정 지점이 호출 bugfix
되었고 다음과 병합하려고 한다고 가정하십시오 master
.
git checkout master
git merge --squash bugfix
git commit
이것은 bugfix
지점 에서 모든 커밋을 가져 와서 1 개의 커밋으로 스쿼시하고 브랜치와 병합합니다 master
.
설명 :
git checkout master
사용자로 전환 master
지점.
git merge --squash bugfix
bugfix
지점 에서 모든 커밋을 가져 와서 현재 지점과 병합합니다.
git commit
병합 된 변경 사항에서 단일 커미트를 작성합니다.
-m
매개 변수를 생략하면 커밋을 완료하기 전에 스쿼시 된 커밋의 모든 메시지를 포함하는 초안 커밋 메시지를 수정할 수 있습니다.
답변
마침내 나를 위해 이것을 정리 한 것은 그것을 보여주는 주석 이었습니다 .
git checkout main
git merge --squash feature
수행하는 것과 같습니다.
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
105 (!!) 커밋으로 기능 분기를 병합하고 모두 하나로 스쿼시하고 싶을 때 중간 커밋 (또는 적어도 커밋) 마다git rebase -i origin/master
병합 충돌을 별도로 해결해야하기 때문에 원하지 않습니다. 자식은 스스로 알아낼 수 없습니다). 를 사용 하면 전체 기능 분기를 병합하기위한 단일 커밋의 결과 를 얻을 수 있습니다. 그리고 최대 하나의 수동 충돌 해결 만하면됩니다.git merge --squash
답변
스쿼시 옵션과 병합하려고합니다. 한 번에 하나의 지점을 만들고 싶을 때입니다.
git merge --squash feature1
단일 커밋과 동시에 모든 브랜치를 병합하려면 먼저 대화식으로 리베이스하고 각 기능을 스쿼시 한 다음 문어 병합 :
git checkout feature1
git rebase -i master
한 커밋으로 스쿼시 한 다음 다른 기능에 대해 반복하십시오.
git checkout master
git merge feature1 feature2 feature3 ...
마지막 병합은 한 번에 많은 분기를 병합하기 때문에 “문어 병합”입니다.
도움이 되었기를 바랍니다
답변
이미 git merge bugfix
켜져 있는 경우 다음을 사용 main
하여 병합 커밋을 스쿼시 할 수 있습니다.
git reset --soft HEAD^1
git commit
답변
커스텀 커밋 newFeature
으로 브랜치를 병합하십시오 master
.
git merge --squash newFeature && git commit -m 'Your custom commit message';
대신에, 당신은
git merge --squash newFeature && git commit
커밋 메시지는 모든 newFeature
브랜치 커밋을 포함하며 커스터마이징 할 수 있습니다.
나는 여기에 철저히 설명합니다 : https://youtu.be/FQNAIacelT4
답변
나는이 질문이 Github에 관한 것이 아니라는 것을 알고 있지만 Github이 널리 사용되며 이것이 내가 찾던 대답이므로 여기에서 공유 할 것입니다.
Github은 리포지토리에 활성화 된 병합 옵션에 따라 스쿼시 병합을 수행 할 수 있습니다.
스쿼시 병합이 활성화 된 경우 “스쿼시 및 병합”옵션이 “병합”버튼 아래 드롭 다운에 나타납니다.
답변
여러 커밋으로 feature / task1에서 작업했다고 가정합니다.
-
프로젝트 지점으로 이동하십시오 (project / my_project)
git checkout project/my_project
-
새로운 브랜치 생성 (feature / task1_bugfix)
git checkout -b feature/task1_bugfix
-
--squash
옵션으로 마지git merge --squash feature/task1
-
단일 커밋 만들기
git commit -am "add single comments"
-
당신의 지점을 밀어
git push --set-upstream origin feature/task1_bugfix