자식에서 병합을 다시 실행할 수있는 방법이 있습니까?


17

그래서 나는 큰 실수를했다. 나는 커밋을 작성하고 병합하고 (그러나 코드를 엉망으로 만들었습니다) 밀었다. 병합을 다시 실행하고 코드를 올바르게 작성하고 싶습니다. 이것을 할 수있는 방법이 있습니까?

비트 버킷을 사용합니다.

git 

10
참고 사항-이것은 실제로 SO에 대한 주제 이며 마이그레이션 해서는 안됩니다 . 때때로 자신의 도움말 페이지를 읽고 프로그래머가 일반적으로 사용 하는 소프트웨어 도구에 주목하십시오 . 즉, 여기에서도 주제입니다. SwiftCore, 마이그레이션 된 것이 나쁘지 않다는 것은 귀하의 잘못이 아닙니다.
Bob

답변:


13

이것이 "축복 된"방법인지 확실하지 않지만, 여기에 "강제로 밀기"또는 그와 비슷한 것을하지 않고도 동일한 문제를 해결하기 위해 수행 한 작업이 있습니다.

당신의 역사가 다음과 같다고 가정 해 봅시다 (그리고 M은 연약한 합병입니다).

-A--B--C--M (master points here)
  \      /
   D----E

달리기 git checkout -b merge_fix <commit ID E>는 실수하기 전에 지점을 만듭니다.

-A--B--C--M (master points here)
  \      /
   D----E (HEAD and merge_fix point here)

이제 새 지점에서 병합을 다시 수행하겠습니다. 우리는 단지 병합 할 수 없으므로 master잘못된 병합 전에 커밋을 수동으로 선택해야합니다. git merge <commit ID C>지난번에했던 것과 같은 실수를하지 마십시오!

-A--B--C--M (master points here)
  \      X
   D----E-G (HEAD and merge_fix point here)

커밋 G이 좋아 보인다고 가정하면 master지점 의 상단과 동기화하고 싶습니다 . 이 명령은 git에게 master에 대한 변경 사항을 무시하고 변경 사항을 강제로 병합 결과로 만들도록 지시합니다.git merge -s ours master

-A--B--C--M (master points here)
  \      X  \
   D----E-G--H (HEAD and merge_fix point here)

마지막으로 (커밋 H이 좋아 보인다고 가정하면 master고정 병합 을 빨리 포함하고 싶습니다.

git checkout master
git merge merge_fix

이것은 실제로 master분기 포인터를로 이동 H하지만 ASCII 아트를 약간 정리할 수 있습니다.

-A--B--C--M--H (HEAD, master, and merge_fix all point here)
  \      X  /
   D----E--G

그리고 당신은 그것을 가지고 있습니다! 기록을 무효화하지 않고 병합을 다시 완료했습니다!


6

다음과 같이 할 수 있습니다.

  1. 병합하기 전에 커밋으로 재설정하십시오.
  2. 다시 병합을 수행하십시오
  3. 강제 밀기

그건:

git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname

git push --force원격 지점에 있던 모든 것을 다시 작성 한다는 점을 명심하십시오. 해당 지점을 사용하는 다른 사람들도 이것의 영향을받을 수 있습니다. (일반적으로이 작업을 수행해서는 안됩니다.)


6
git push --force안전한 것은 기억 하지 마십시오
Zepplock

1

git merge --abort 그런 다음 다시 병합 할 수 있습니다


"중단 할 병합이 없습니다"메시지가 나타납니다

3
병합 충돌이있는 경우에만 수행 할 수 있습니다.
chanchal118

왜 빼기? 이것은 나를 도왔다.
swdev 2016 년

문제는 이미 병합을 잘못 완료하고 푸시 한 시점에 관한 것입니다.
Robin Green

-1

이 희망이 당신에게 유용하다는 희망을 확인하십시오

https://www.kernel.org/pub/software/scm/git/docs/howto/revert-branch-rebase.html

OP 질문에 대답 할 수는 있지만 링크에서만 답변을 받아 들일 수는 없습니다. 그러나 링크에서 가장 관련이 높은 발췌문을 인용 할 수 있습니다.

이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Pranav 웃
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.