다음은 직장에서 일반적으로 다루는 워크 플로입니다.
git checkout -b feature_branch
# Do some development
git add .
git commit
git push origin feature_branch
이 시점에서 기능 브랜치는 동료들의 검토를 받고 있지만 .NET에 종속 된 다른 기능을 계속 개발하고 싶습니다 feature_branch
. 그래서 feature_branch
검토 하는 동안 ...
git checkout feature_branch
git checkout -b dependent_branch
# Do some more development
git add .
git commit
이제 feature_branch의 코드 검토에 대한 응답으로 몇 가지를 변경합니다.
git checkout feature_branch
# Do review fixes
git add .
git commit
git checkout dependent_branch
git merge feature_branch
이제 여기에서 문제가 생깁니다. master에 대한 스쿼시 정책이 있습니다. 즉, master에 병합 된 기능 분기를 단일 커밋으로 스쿼시해야합니다.
git checkout feature_branch
git log # Look for hash at beginning of branch
git rebase -i first_hash_of_branch # Squash feature_branch into a single commit
git merge master
를 제외하고 모든 것이 멋집니다 dependent_branch
. 종속 브랜치를 마스터로 리베이스하거나 마스터를 마스터로 병합하려고 할 때 git은 다시 작성 / 스쿼시 된 기록에 혼란스럽고 기본적으로 모든 변경 사항을 depedendent_branch
충돌로 표시합니다. .NET의 모든 변경 사항을 거치고 기본적으로 다시 수행하거나 충돌을 해제하는 것은 PITA입니다 dependent_branch
. 이것에 대한 해결책이 있습니까? 때로는 수동으로 패치를 만들어 마스터의 새로운 브랜치에 적용 하겠지만 실제 충돌이있는 경우 수정하는 것이 더 나쁩니다.
git checkout dependent_branch
git diff > ~/Desktop/dependent_branch.diff
git checkout master
git checkout -b new_dependent_branch
patch -p1 < ~/Desktop/dependent_branch.diff
# Pray for a clean apply.
어떤 아이디어? 스쿼시 동안 재 작성된 기록 때문에 이런 일이 발생한다는 것을 알고 있지만 변경할 수없는 요구 사항입니다. 최상의 솔루션 / 해결 방법은 무엇입니까? 내가 할 수있는 마법이 있나요? 아니면 수동으로 diff를 만드는 것과 관련된 모든 단계를 수행하는 더 빠른 방법이 있습니까?
git add .
완전히 사악하며 의도하지 않은 일을 저지르면 결국 당신을 물게 될 것입니다. 당신은 사용해야git add -p
하거나 적어도git add -u .