bitbucket을 사용 중이며 git의 rebase 기능을 사용하여 문제가 발생했습니다. 간단히 말해서 rebase 할 때마다 이미 적용한 변경 사항을 다시 적용해야합니다. 아래 단계를 사용하여 문제를 재현했습니다. 그것의 단순화 된 버전이지만 결과는 동일했습니다.rebase와 함께 git workflow를 올바르게 사용하려면 어떻게해야합니까?
- 개발자 A는 커밋 밀어하는 자식의 repo를 만들고
contributors.txt
master
에 추가됩니다. 지금master
에는contributors.txt
파일이 있습니다. 파일 내용은Developer A
- 입니다. 개발자 A는
master
에서branch-a
을 만듭니다. - 개발자 B는
master
에서branch-b
을 만듭니다. - 개발자 A는 기여자 파일을
branch-a
에 추가합니다.Developer A Developer A2
- 개발자 B는 참여자 개발자 A가 커밋 커밋 원격
branch-a
- 개발자 B에 변경 내용을 밀어 원격
branch-b
에 대한 변경 사항을 밀어Developer A Developer B
- 처럼
branch-b
그렇게 보이는 파일을 추가합니다. - 개발자 A는
branch-a
과master
을 병합합니다. - 개발자 B가 마스터를 체크 아웃하고 끌어 오기 때문에 로컬 마스터는 위의 8 단계에서 설명한 병합에 의해 적용된 변경 사항으로 업데이트됩니다.
- 개발자 B는
branch-b
을 확인하고 개발자 012가 혼합 충돌을 얻습니다. 개발자 B는 고정 충돌을 추가git add
을 수행하고git rebase --continue
를 실행Developer A Developer A2 Developer B
- 같은 파일이 지금 보이는 있도록
- 개발자 B는 병합 충돌을 해결합니다. 모든 것이 잘됩니다.
- 개발자 B는 로컬 및 리모컨
branch-b
이 병합되었으므로 이제branch-b
을 가져옵니다. (당기기 전에 업스트림을 설정해야 함) - 개발자 B가 병합 충돌을 해결하면 로컬
branch-b
에 변경 사항이 적용되어 원격으로 푸시 될 수 있습니다. - 개발자 B가
branch-b
을 원격으로 푸시합니다.git push origin branch-b
을 사용하십시오. 모든 것이 잘됩니다. - 개발자 B는
branch-b
에 새 파일을 만들고 커밋합니다. - 개발자 B는 않습니다
git checkout master
git pull
(이 마지막 풀 즉 단계 이후 변경되지 않았기 때문에 마스터가 최신 9)git checkout branch-b
git rebase master
- 때
git rebase master
이 실행되면 git은 개발자 B에게 같은 충돌을 다시 해결하도록 요청합니다. 왜 이런 일이 생길까요?이미 적용된 변경 사항을 알고 다시 적용하지 않아야합니까?
이 문제를 해결하기 위해 리베이스 대신 병합을 사용할 수 있다고 생각합니다. 하지만 내가 rebase를 잘못 사용하고있는 것 같습니다. 내가 뭘 잘못하고 있는지 알려주십시오.
해결책을 이해합니다. 그러나이 문제에 대해 분명하지 않다. 13 단계를 성공적으로 마쳤 으면 원점/지점 -b가 마스터 위에 리베이스 되었습니까? – ysfiqbl
로컬 브랜치 -b가 리베이스되었지만, 리베이스 후에 아무 것도 푸시되지 않았기 때문에 origin/branch-b가 없습니다. 그래서 당신이 밀어 넣을 때 여전히 병합 충돌이 발생합니다. 밀어 넣기를 수행하면 origin/branch-b가 리베이스 된 버전으로 바뀝니다. –
알겠습니다. 고마워요. 그것은 이제 완벽하게 이해됩니다. 이 워크 플로 대신 다른 워크 플로를 수행해야합니까? 내가 rebase를 사용하고 싶다면이 방법을 사용하는 것이 좋습니다. – ysfiqbl