git 스크롤 오류 병합된 지점

장면


온라인 분기:마스터
당신이 개발한 지점: dev1
동시 개발 지점: dev2
dev1 지점에서 개발한 코드가 이미 출시되었고merge가master에 도착했습니다
이 동시에 dev2 지점도 이미 출시되었고merge가 마스터에 도착했습니다
이 때 dev1의 커다란 버그를 발견했습니다. 온라인 버전에서는 이 지점의 코드를 모두 제거해야 합니다.

원하는 효과


모든 dev1의 합병을 취소하고 dev2 코드를 보존해야 합니다.
또한 로컬 dev1의 지점은 이 코드를 삭제하고 싶지 않으며, 이를 바탕으로 개발합니다.

master 분기


만약 리셋을 사용한다면, 온라인의 몇 개의 제출 기록은 보류되지 않고, 우리가 원하는 효과에 도달하지 못할 것이다.
여기는git revert를 사용합니다.
우선 모든 dev1의 변경 사항을 취소하고 dev1의 두 번의commit id를 찾아야 합니다
git revert 63db9b1228c9e38a015513f834a42fa55002fca8
git revert a407174c5df3e47e1866663e4c3fe611419eb5a8

이때 마스터는 우리가 원하는 효과에 도달했다.

개발 지점


이 때 dev1 지점으로 돌아가서 버그를 복구하고 이전에 제출한 코드를 보존해야 합니다.
그러나 로그인하기 전에 항상 메르지 마스터를 먼저 해야 한다. 그러나 마스터의 두 번revert는 너를 앞서고 메르지 후에 너의 코드가 없어진다.
다음은 현재 dev1의 제출 상황입니다
그래서 우리는mergemaster를 사용한 후에revert를 사용하여 이번merge를 취소해야 한다.
그러나 이때merge가master를 끝낸 후에 이 지점에 새 코드를 제출한 것을 발견하면revert는 오류를 보고합니다.
git revert ce479b597de6025da4a67ddd4a94d1b8034d8c67

error: commit ce479b597de6025da4a67ddd4a94d1b8034d8c67 is a merge but no -m option was given.
fatal: revert failed

이것은 취소된 합병이기 때문에git는 이 두 지점 중 어느 변경 사항을 저장해야 할지 모른다.
-m 1은 현재 분기의 변경 사항을 유지함을 나타냅니다.
-m 2는 Master 변경 사항을 유지함을 나타냅니다.
우리의 목적은 dev1의 코드를 보존하기 위해서이기 때문에 현재 코드를 보존해야 한다. 즉, -m1을 사용해야 한다.
git revert -m 1
ce479b597de6025da4a67ddd4a94d1b8034d8c67
[dev1 bb363fa] Revert "Merge branch 'master' into dev1"
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename dev2 add => b (100%)
 create mode 100644 c

위의 코드를 실행하면, 우리는 코드가 다시 돌아왔고, 마스터가 굴러가기 전의 코드와 같다는 것을 발견할 수 있다.
버그를 고치고 현재 코드를 마스터에 합치면 dev2가 제출한 코드가 당신의merge에 의해 제거되었음을 발견할 수 있습니다???
이것은 당신의 리버 합병이 당신의 지점 코드를 사용했기 때문입니다. 그러나 당신의 dev1 지점에는 dev2 코드가 없습니다.
그래서 우리는 마스터가 굴러가기 전에 dev1 지점으로 돌아가서 최신 코드를 한 번 먼저merge한 다음에 다음 다음 동작을 실행해야 한다.

총결산


총괄해 보면 절차가 매우 간단하다.
1. 당신이 개발하고자 하는 지점을 유지하고 마스터의 최신 코드를 동기화합니다.
2. revert 모든 이 지점의 제출.
3. 분기mergemaster로 돌아갑니다.
4.revert merge master 제출

좋은 웹페이지 즐겨찾기