Git에서 되 돌린 병합 다시 실행 develop분기에 병합했습니다 .

여기에 약간의 문제가 있습니다 28s.Git에 문제 별 분기가 있었고 일반 develop분기에 병합했습니다 . 너무 빨리 수행 한 것으로 나타 났으므로 병합 취소를 위해 git-revert를 사용했습니다. 그러나 지금, 시간이 병합왔다 28s으로 develop하지만, 자식 병합 명령은 원래 병합을보고, 즐겁게 모두가 잘와 가지가 이미되어 합병했다고 발표했다. 지금 무엇을해야합니까? ‘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

이것은에서 실제 병합 될 것 28s으로 devel(지금은 자식의 역사에서 지워집니다) 초기처럼.


답변

같은 문제에 직면했을 때이 게시물을 찾았습니다. 나는 하드 등을 재설정하는 것이 무섭다는 것을 알게되었습니다.

대신 커밋을 확인하여 지점이 예를 들어 다시 돌아 가기를 원했습니다 git checkout 123466t7632723. 그런 다음 지점으로 변환됩니다 git checkout my-new-branch. 그런 다음 더 이상 원하지 않는 지점을 삭제했습니다. 물론 이것은 당신이 엉망인 지점을 버릴 수있는 경우에만 작동합니다.


답변

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

이제 지점에 대한 PR을 작성하십시오. users/yourname/revertOfSHA1