Git에서 되 돌린 병합 다시 실행
여기에 약간의 문제가 있습니다 28s
.Git에 문제 별 분기가 있었으며 일반 develop
분기에 병합되었습니다 . 너무 빨리 수행 한 것으로 나타 났으므로 병합 취소를 위해 git-revert를 사용했습니다. 그러나 이제는으로 병합 28s
될 시간이 develop
되었지만 git-merge 명령은 원래 병합을보고 모든 것이 정상이고 분기가 이미 병합되었음을 알려줍니다. 지금 무엇을해야합니까? 'Revert "28s-> develop"되돌리기'커밋을 만드시겠습니까? 그것을하는 좋은 방법은 아니지만 지금은 다른 상상할 수 없습니다.
트리 구조는 다음과 같습니다.
"되돌리기"를해야합니다. 원본 복귀 방법에 따라 들리는 것처럼 쉽지 않을 수 있습니다. 이 주제에 대한 공식 문서를 보십시오 .
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
허용하기 위해:
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
그러나 모두 작동합니까? 물론입니다. 병합을 되돌릴 수 있으며 순수한 기술적 인 각도에서 git은 매우 자연스럽게 처리했으며 실제로 아무런 문제가 없었습니다.
방금 "병합 전 상태"에서 "병합 후 상태"로의 변경을 고려한 것입니다.
복잡한 것도없고 이상한 것도없고 정말 위험한 것도 없습니다. 힘내 생각조차하지 않고 그것을 할 것입니다.따라서 기술적 인 측면에서 병합을 되 돌리는 데 아무런 문제가 없지만 워크 플로 각도에서는 일반적으로 피해야하는 것 입니다.
당신은 메인 트리에 통합있어 문제가 발견되면 모두가, 예를 들어, 수에하면 오히려 병합 되돌리기보다는를하려고 정말 열심히 :
- 병합 한 지점으로 문제를 나누고 해결하십시오.
- 또는 원인이 된 개별 커밋을 되돌리려 고합니다.
그래, 더 복잡하고, 아니, 항상 일을하지 않을 것 (때로는 대답은 "죄송합니다, 아직 준비가되지 않았기 때문에 난 정말 그것을 통합 안, 나는 정말 취소해야 모든 의를 병합 "). 따라서 병합을 되돌려 야하지만 병합을 다시 실행하려면 되돌리기를 되돌려 야합니다.
그런 역사가 있다고 가정 해 봅시다
---o---o---o---M---W---x-------x-------*
/
---A---B
A, B가 커밋에 실패하고 W-M을 되 돌리는 경우
그래서 발견 된 문제를 해결하기 전에 나는 지점에 W 커밋을 선택합니다.
git cherry-pick -x W
그런 다음 지점에서 W 커밋을 되돌립니다.
git revert W
계속 고칠 수 있습니다.
최종 역사는 다음과 같습니다.
---o---o---o---M---W---x-------x-------*
/ /
---A---B---W---W`----------C---D
PR을 보내면 PR이 되돌리기 취소임을 분명히 표시하고 새로운 커밋을 추가합니다.
워크 플로우를 너무 많이 방해하지 않고 되돌리기를 되돌리려면 :
- 개발의 로컬 쓰레기 복사본 만들기
- 로컬 개발 사본에서 되돌리기 커밋 되돌리기
- 해당 사본을 기능 분기로 병합하고 기능 분기를 git 서버로 푸시하십시오.
이제 준비가되면 기능 분기를 정상적으로 병합 할 수 있습니다. 여기서 유일한 단점은 기록에 몇 가지 추가 병합 / 복귀 커밋이 있다는 것입니다.
GIT에서 되돌리기를 되돌리려면 :
git revert <commit-hash-of-previous-revert>
대신 사용하는 git-revert
당신은이 명령을 사용할 수도 devel
하는 지점 버리고 잘못된 병합 (대신 그것을 되 돌리는의) 커밋 (취소).
git checkout devel
git reset --hard COMMIT_BEFORE_WRONG_MERGE
또한 작업 디렉토리의 내용을 적절하게 조정합니다. 조심하십시오 :
- 병합이 잘못되었으므로 개발 브랜치에서 변경 사항 을 저장하십시오
git-reset
.git reset
인수 로 지정한 커밋 후 모든 커밋 이 사라집니다! - 또한 재설정이 히스토리를 다시 작성하므로 다른 저장소에서 변경 사항을 이미 가져온 경우이 작업을 수행하지 마십시오.
이것을 git-reset
시도하기 전에 맨 페이지를주의 깊게 연구하는 것이 좋습니다 .
재설정 후 변경 사항을 다시 적용한 devel
다음
git checkout devel
git merge 28s
This will be a real merge from 28s
into devel
like the initial one (which is now erased from git's history).
I just found this post when facing the same problem. I find above wayyy to scary to do reset hards etc. I'll end up deleting something I don't want to, and won't be able to get it back.
Instead I checked out the commit I wanted the branch to go back to e.g. git checkout 123466t7632723
. Then converted to a branch git checkout my-new-branch
. I then deleted the branch I didn't want any more. Of course this will only work if you are able to throw away the branch you messed up.
I would suggest you to follow below steps to revert a revert, say SHA1.
git checkout develop #go to develop branch
git pull #get the latest from remote/develop branch
git branch users/yourname/revertOfSHA1 #having HEAD referring to develop
git checkout users/yourname/revertOfSHA1 #checkout the newly created branch
git log --oneline --graph --decorate #find the SHA of the revert in the history, say SHA1
git revert SHA1
git push --set-upstream origin users/yourname/revertOfSHA1 #push the changes to remote
Now create PR for the branch users/yourname/revertOfSHA1
- create new branch at commit prior to the original merge - call it it 'develop-base'
- '개발 기반'위에 '개발'의 대화식 리베이스를 수행합니다 (이미 위에 있음에도 불구하고). 대화식 리베이스 중에는 병합 커밋과 병합을 취소 한 커밋을 모두 제거 할 수 있습니다. 즉, git history에서 두 이벤트를 모두 제거합니다.
이 시점에서 정기적으로하는 것처럼 기능 브레이 치를 병합 할 수있는 깨끗한 '개발'브랜치를 갖게됩니다.
참고 URL : https://stackoverflow.com/questions/1078146/re-doing-a-reverted-merge-in-git
'Programming' 카테고리의 다른 글
numpy : 배열에서 고유 한 값에 대한 가장 효율적인 빈도 수 (0) | 2020.05.06 |
---|---|
socket.io에 대한 초보자 초보자 자습서? (0) | 2020.05.06 |
웹 사이트 스트레스 테스트를위한 최선의 방법 (0) | 2020.05.06 |
서로 다른 운영 체제 사이에서 줄 끝 변환이 git core.autocrlf와 작동하는 방식 (0) | 2020.05.06 |
최신 C ++로 무료 성능을 얻을 수 있습니까? (0) | 2020.05.06 |