원격 Git 서버가 있습니다. 수행하려는 시나리오는 다음과 같습니다.
각 버그/기능에 대해 다른 Git 분기를 만듭니다.
비공식 Git 메시지와 함께 해당 Git 분기에서 내 코드를 계속 커밋합니다.
최상위 저장소에서 공식 Git 메시지와 함께 하나의 버그에 대해 하나의 커밋을 수행해야 합니다.
그렇다면 모든 체크인에 대해 하나의 커밋만 가져오도록 내 브랜치를 원격 브랜치에 병합하려면 어떻게 해야 할까요?
질문자 :SunnyShah
원격 Git 서버가 있습니다. 수행하려는 시나리오는 다음과 같습니다.
각 버그/기능에 대해 다른 Git 분기를 만듭니다.
비공식 Git 메시지와 함께 해당 Git 분기에서 내 코드를 계속 커밋합니다.
최상위 저장소에서 공식 Git 메시지와 함께 하나의 버그에 대해 하나의 커밋을 수행해야 합니다.
그렇다면 모든 체크인에 대해 하나의 커밋만 가져오도록 내 브랜치를 원격 브랜치에 병합하려면 어떻게 해야 할까요?
버그 수정 분기를 bugfix
master
에 병합하려고 한다고 가정해 보겠습니다.
git checkout master git merge --squash bugfix git commit
bugfix
브랜치에서 모든 커밋을 가져와 하나의 커밋으로 master
브랜치와 병합합니다.
설명 :
git checkout master
master
브랜치로 전환합니다.
git merge --squash bugfix
bugfix
브랜치에서 모든 커밋을 가져와 현재 브랜치와 1 커밋으로 그룹화합니다.
(병합 커밋이 나타나지 않음, 커밋을 수행하기 전에 수동으로 충돌을 해결할 수 있음)
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이 스스로 알아낼 수 없는 것들). git merge --squash
사용하면 전체 기능 분기를 병합하기 위한 단일 커밋의 원하는 결과를 얻을 수 있습니다. 그리고 수동 충돌 해결은 최대 한 번만 수행하면 됩니다.
스쿼시 옵션과 병합하고 싶습니다. 한 번에 한 분기씩 수행하려는 경우입니다.
git merge --squash feature1
단일 커밋으로 동시에 모든 분기를 병합하려면 먼저 대화식으로 리베이스하고 각 기능을 스쿼시한 다음 문어를 병합합니다.
git checkout feature1 git rebase -i master
하나의 커밋으로 스쿼시한 다음 다른 기능에 대해 반복합니다.
git checkout master git merge feature1 feature2 feature3 ...
마지막 병합은 한 번에 많은 가지를 병합하기 때문에 "문어 병합"입니다.
도움이 되었기를 바랍니다
main
에 git merge bugfix
가 있는 경우 다음을 사용하여 병합 커밋을 하나로 스쿼시할 수 있습니다.
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
푸시하기 전에 로컬 브랜치를 스쿼시하려면:
아직 체크 아웃되지 않은 경우 작업할 해당 분기를 체크아웃하십시오.
유지하려는 가장 오래된 커밋의 샤를 찾으십시오.
해당 커밋에서 새 분기(tmp1)를 생성/체크아웃합니다.
git checkout -b tmp1 <sha1-of-commit>
원래 가지를 스쿼싱하는 새 가지에 병합합니다.
git merge --squash <original branch>
요약 커밋 메시지와 함께 병합에 의해 생성된 변경 사항을 커밋합니다.
git commit -m <msg>
스쿼시하려는 원래 가지를 확인하십시오.
git checkout <branch>
유지하려는 원래 커밋 샤로 재설정합니다.
git reset --soft <sha1>
새 tmp1 분기를 기반으로 이 분기를 리베이스합니다.
git rebase tmp1
그게 다야 - 이제 모든 것이 정상이라고 확신하면 임시 tmp1 분기를 삭제하십시오.
힘내의 경우
새 기능 만들기
터미널/쉘을 통해:
git checkout origin/feature/<featurename> git merge --squash origin/feature/<featurename>
커밋하지 않고 먼저 검토할 수 있습니다.
그런 다음 이 새 분기에서 기능을 커밋하고 완료하고 이전 분기(개발한 것)를 삭제/무시합니다.
git checkout YOUR_RELEASE_BRANCH git pull git checkout -b A_NEW_BRANCH git merge --squash YOUR_BRANCH_WITH_MULTIPLE_COMMITS git commit -am "squashing all commits into one" git push --set-upstream origin A_NEW_BRANCH
오류가 발생하는 경우: 병합되지 않은 파일이 있으므로 커밋할 수 없습니다.
git checkout master git merge --squash bugfix git add . git commit -m "Message"
모든 충돌 파일을 수정했습니다.
git add .
당신은 또한 사용할 수 있습니다
git add [filename]
기능 브랜치가 완료되었으며 단 한 번의 커밋으로 마스터, 개발 또는 기타 대상 브랜치에 커밋할 준비가 되었습니다.
마스터를 대상 브랜치로 교체: 개발 등
여러 커밋을 수행한 분기의 이름이 bugfix/123이고 이러한 커밋을 스쿼시하려고 한다고 가정합니다.
먼저, 개발(또는 저장소 이름이 무엇이든)에서 새 분기를 만듭니다. 새 분기의 이름이 bugfix/123_up이라고 가정합니다. git bash에서 이 분기를 확인하십시오.
이제 이 분기에는 모든 변경 사항이 포함된 커밋이 하나만 있습니다.
이 프로세스를 더 쉽게 만들기 위해 내가 만든 도구를 사용할 수 있습니다: git-squash . 예를 들어 마스터 분기에서 분기된 기능 분기에 대한 모든 커밋을 스쿼시하려면 다음을 작성하세요.
git squash master git push --force
사용하다
git status
무슨 일이 일어나고 있는지 확인하기 위해.
그 다음에
git checkout master git merge --squash bugfix git add (add which files you want or use wildcard command like ".")
그 다음에
git commit -m "message"
그리고 이제 마지막이지만 가장 중요한 것은
git push -u origin master
여기서 origin
은 원하는 다른 리모컨이 될 수 있습니다.
출처 : http:www.stackoverflow.com/questions/5308816/how-can-i-merge-multiple-commits-onto-another-branch-as-a-single-squashed-commit
jQuery를 사용하여 JavaScript 객체에서 선택 항목에 옵션을 추가하는 가장 좋은 방법은 무엇입니까? (0) | 2022.03.07 |
---|---|
데이터베이스의 모든 테이블 크기 가져오기 (0) | 2022.03.07 |
Pandas 데이터 프레임에서 여러 열 선택 (0) | 2022.03.07 |
match_parent와 fill_parent의 차이점은 무엇입니까? (0) | 2022.03.07 |
JavaScript에서 날짜 형식 지정에 대한 문서는 어디에서 찾을 수 있습니까? (0) | 2022.03.07 |