Git : 커밋을 역 병합하는 방법?


124

SVN을 사용하면 커밋을 역 병합하는 것이 쉽지만 Git으로 어떻게 할 수 있습니까?



나는 이것이 질문이 의미하는 바라고 생각하지 않습니다. SVN의 역 병합은 커밋에서 로컬 변경으로 변경 사항을 되돌 리므로 편집하고 다시 커밋 할 수 있습니다.
Dormouse

답변:


105

이전 커밋의 변경 사항을 '실행 취소'하는 새 커밋을 만들려면 다음을 사용하십시오.

$ git revert <commit>

리베이스 및 재설정을 통해 과거의 임의 지점에서 실제로 커밋을 제거 할 수도 있지만, 이미 커밋을 다른 저장소로 푸시 한 경우 (또는 다른 사람이 사용자에게서 가져온 경우) 그렇게하고 싶지 않습니다. .


31
되돌릴 변경 사항을 지정 -m <parent number>하려면 git revert에 옵션 을 제공해야 할 수 있습니다. 게시되지 않은 기록의 병합을 취소하려면을 사용하십시오 git reset --hard HEAD^1.
Jakub Narębski

3
Jakub : 병합 커밋을 되 돌리는 경우에는 맞지만 Subversion 용어로 "reverse-merge"는 실제로 모든 종류의 커밋을 되 돌리는 이름입니다.
Ben James

4
사용 -m은 병합되지 않은 분기의 향후 병합이 해당 병합 이전의 변경 사항을 포함하지 않음 을 의미합니다! 병합되지 않은 분기를 다시 병합하는 적절한 방법 은 schacon.github.com/git/howto/revert-a-faulty-merge.txt 를 참조하십시오 .
Martijn Pieters

125

병합 커밋 을 되돌리려 면 다음을 사용해야 git revert -m <parent number>합니다.. 예를 들어 1 번 상위를 사용하여 가장 최근의 병합 커밋을 되돌리려면 다음을 사용합니다.

git revert -m 1 HEAD

마지막 커밋 전에 병합 커밋을 되돌리려면 다음을 수행합니다.

git revert -m 1 HEAD^

git show <merge commit SHA1>부모를 볼 때 사용 합니다. 번호는 표시되는 순서입니다.Merge: e4c54b3 4725ad2

git merge 문서 : http://schacon.github.com/git/git-merge.html

git merge 토론 (혼란 스럽지만 매우 상세 함) : http://schacon.github.com/git/howto/revert-a-faulty-merge.txt


36
부모와 관련된 '번호'를 어떻게 얻을 수 있습니까? 분기에는 고유 한 숫자 'ID'가 있습니까?
daniyalzade 2011 년

7
git show <merge commit SHA1>부모를 볼 때 사용 합니다. 번호는 표시되는 순서입니다. 예Merge: e4c54b3 4725ad2
supermethod

8
예 : git revert -m 1 SHA1이 명령은 헤드 이전에 여러 개의 병합 커밋이었고 그 아래에 많은 커밋이있는 병합 커밋을 되 돌리는 데 도움이되었습니다.
c.apolzon

3
부모는 무엇입니까? e4c54b3 또는 4725ad2?
Dolphin

1
이것은 여전히 ​​git show의 결과가 부모 번호와 어떻게 관련되는지에 대한 충분한 정보를 제공하지 않습니다. "표시되는 순서"는 1 기반입니까? 0 기반? 이 예에서 구체적으로 상위 1의 SHA1은 무엇입니까? e4c54b3 또는 4725ad2?
cowlinator

4

내가 당신을 올바르게 이해한다면 당신은

svn merge -rn:n-1

이전 커밋에서 되돌릴 수 있습니다.이 경우 아마도

git revert

0
git reset --hard HEAD^ 

병합 변경 사항을 되돌리려면 위의 명령을 사용하십시오.


3
이것은 원래 포스터가 요구하는 것을 수행하지 않는 병합 커밋을 버립니다. OP는 이전 변경 사항의 기록을 완전히 지우지 않고 이전 변경 사항을 취소하기 위해 역 패치를 수행하려고합니다.

-1

커밋을 원하지 않거나 나중에 커밋하려는 경우 (커밋 메시지는 계속 준비되며 편집 할 수도 있음) :

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