git merge –squash를 사용하는 방법? Git 브랜치를 만듭니다. 비공식 Git 메시지가있는 Git

원격 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은 리포지토리에 활성화 된 병합 옵션에 따라 스쿼시 병합을 수행 할 수 있습니다.

스쿼시 병합이 활성화 된 경우 “스쿼시 및 병합”옵션이 “병합”버튼 아래 드롭 다운에 나타납니다.

"스쿼시 및 병합"Github 기능의 스크린 샷


답변

여러 커밋으로 feature / task1에서 작업했다고 가정합니다.

  1. 프로젝트 지점으로 이동하십시오 (project / my_project)

    git checkout project/my_project
    
  2. 새로운 브랜치 생성 (feature / task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. --squash옵션으로 마지

    git merge --squash feature/task1
    
  4. 단일 커밋 만들기

    git commit -am "add single comments"
    
  5. 당신의 지점을 밀어

    git push --set-upstream origin feature/task1_bugfix