Git 병합을 해제하는 방법은 무엇입니까?


82

실수로 git pull origin masterdev에서 a 를했고 master가 dev에 병합되었습니다. 병합을 해제 할 수 있습니까?

나는 이미 다른 솔루션을 보았고, dev와 master 모두에서 이것을 시도했습니다 : git revert -m 1 <commit>(각각 한 번) 그러나 나는 얻었습니다 : 매번 모든 것이 최신입니다.

dev에서 병합 마스터를 실행 취소하고 싶습니다 : https://github.com/iliassk/PED_MyTodo/commits/dev commit : e382550

답변:


142

그 당시 커밋을 찾은 경우 병합 직전 상태로 분기를 재설정 할 수 있습니다.

한 가지 방법 git reflog은를 사용 하는 것입니다. 그러면 보유한 모든 HEAD가 나열됩니다. git reflog --relative-date각 변경 사항이 발생한 시간을 보여 주므로 매우 유용합니다.

해당 커밋을 찾으면 a를 수행하면 git reset --hard <commit id>분기가 이전과 동일합니다.

당신이있는 경우 SourceTree를 , 당신은 찾아 볼 수 <commit id>있는 경우가 git reflog너무 압도한다.


그것은 이상한 병합이기 때문에 : "pull origin master : Merge made by the 'recursive'strategy"나는 약간 잃어버린다. 마스터에서 git reset --hard 757501b를 수행하라고 조언 해 주시겠습니까 (기록에 변경 사항이 없더라도). 또는 git reset --hard 14cbb9c from dev?
redAce 2015 년

당신이 고쳐야하는 것은 개발자입니다, 그렇죠? 따라서이 잘못된 병합 직전에 dev에서 만든 커밋을 찾아서 해당 커밋으로 dev에서 재설정하십시오.
Andreas Wederbrand 2015 년

2
git revert -m 1 <commit id>
mpoletto

1
병합 커밋을 푸시 한 경우이 접근 방식을 적용하지 않는 것이 가장 좋지 않습니다. 그럴 경우이를 가져온 마스터 브랜치가 엉망이됩니다. 대신 되돌리기를 선호합니다.
coffman21

1
당신은 생명의 은인입니다 :)
Pe Dro

58

병합을 커밋하지 않은 경우 다음을 사용하십시오.

git merge --abort


3
내가 아직 병합을 커밋하지 않았기 때문에 감사합니다. :)
Woppi

7
@Eightgate, 그가 명시 적으로 언급하고있다 "당신이 병합을 약속하지 않은 경우는, 다음 사용 : 자식 병합 --abort을"
Abhishek

병합을 수행하지 않은 경우 작동합니다.
daCoda

2

git revert -m병합 및 실행 취소 작업의 기록을 유지하면서 병합을 취소 할 수 있습니다. 아마도 문서화에 좋을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.