우리는 git을 사용하고 마스터 브랜치와 개발자 브랜치를 가지고 있습니다. 새 기능을 추가 한 다음 커밋을 마스터로 리베이스 한 다음 마스터를 CI 서버로 푸시해야합니다.
문제는 리베이스 중에 충돌이 발생하면 리베이스가 완료된 후 원격 분기를 당길 때까지 원격 개발자 분기 (Github에서)를 푸시 할 수 없다는 것입니다. 중복 커밋이 발생합니다. 충돌이 없으면 예상대로 작동합니다.
질문 : rebase 및 충돌 해결 후 중복 커밋을 만들지 않고 로컬 및 원격 개발자 분기를 어떻게 동기화합니까?
설정:
// master branch is the main branch
git checkout master
git checkout -b myNewFeature
// I will work on this at work and at home
git push origin myNewFeature
// work work work on myNewFeature
// master branch has been updated and will conflict with myNewFeature
git pull --rebase origin master
// we have conflicts
// solve conflict
git rebase --continue
//repeat until rebase is complete
git push origin myNewFeature
//ERROR
error: failed to push some refs to 'git@github.com:ariklevy/dropLocker.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
// do what git says and pull
git pull origin myNewFeature
git push origin myNewFeature
// Now I have duplicate commits on the remote branch myNewFeature
편집하다
따라서 다음과 같이 들리므로 워크 플로가 중단됩니다.
myNewFeature 작업 개발자 1 hisNewFeature 작업 개발자 2 모두 마스터를 기본 지점으로 사용
developer2는 myNewFeature를 hisNewFeature로 병합합니다.
developer1은 리베이스하고 충돌을 해결 한 다음 myNewFeature의 원격 지점으로 강제 푸시합니다.
며칠 후 developer2는 myNewFeature를 hisNewFeature에 다시 병합합니다.
이로 인해 다른 개발자가 developer1을 싫어합니까?
force
Push)
rewriting history
, 그건입니다rebase
we
? 당신은 당신보다 더 많은 팀에 있습니까?they
코드를 공유하는 경우보다 사용하지 말아야한다고 말합니다 (내가 아는 사람들)rebase
. 왜 그냥 안하고git pull
와git merge
?