마스터 브랜치를 git의 태그로 되돌리려면 어떻게해야합니까?


91

우리는 가지의 기원을 가지고 발전합니다. 마스터의 초기 상태는에 태그가 지정되었습니다 tag_ABC.

개발 브랜치에 대한 변경 사항이 거의 없으며 원본으로 푸시되었습니다. 그런 다음 실수로 개발을 마스터로 병합하고 원점으로 푸시했습니다.

이제 마스터를 체크 포인트로 되돌리려 고합니다 tag_ABC. 어떻게 할 수 있습니까?

답변:


163

넌 할 수있어

git checkout master
git reset --hard tag_ABC
git push --force origin master

이렇게하면 업스트림 저장소의 기존 기록을 덮어 쓰고이 저장소를 체크 아웃 한 다른 개발자에게 문제가 발생할 수 있습니다.


5
이렇게하면 모든 가지가 힘으로 밀립니다. 당신은 시도 할 수 있습니다git push --force origin master
danza

1
참고로 이전 커밋으로 되돌리려면 agit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^를 여러 번 사용하여 한 번에 하나의 커밋을 뒤로 이동 한 다음 원격에 git push --force origin master있는 경우 사용할 수 있습니다.
누가 복음 Wenke

또한 이전 버전의 사용에 다른 사람의 로컬 복사본의 마스터 분기를 재설정 git pull하고git reset --hard origin/master
누가 복음 Wenke

이 복귀 후 약간의 조언은 팀에게 말할 수 있습니다. 마스터 브랜치에서 가져 오기 !! 감사!!
JRichardsz

93

이것은 질문에 대한 직접적인 대답은 아니지만 지점의 코드를 태그 릴리스로 되 돌리는 방법을 검색 할 때이 페이지가 다시 나타납니다.

또 다른 방법은 분기의 현재 상태와 되돌리려는 태그 사이에 diff를 만든 다음 분기에 적용하는 것입니다. 이렇게하면 버전 기록이 올바르게 유지되고 변경 사항이 들어갔다가 다시 나오는 것을 보여줍니다.

브랜치가 master 라고 가정 하고 돌아 가려는 태그가 1.1.1 이라고 가정합니다.

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

20
이것은 기록을 그대로 유지하고 저장소를 체크 아웃 한 다른 사람들에게 문제를 일으키지 않기 때문에 받아 들여진 대답이어야합니다.
OpenUserX03

1
이것은 우아해 보인다. 하지만 qa 분기를 이전 태그로 되돌리려 고했는데 패치 실패 메시지가 나타납니다. $ 고양이 ../diff_qa.patch | git apply <stdin> : 55 : 후행 공백. <stdin> : 336 : 후행 공백. <stdin> : 12692 : 후행 공백. <stdin> : 12695 : 후행 공백. <li> {{$ tag [ 'rank'] + 1}} : <stdin> : 12706 : 후행 공백. 오류 : 패치 실패 : .env.wholo : 1
rickatech

여러 가지 해결책을 시도했지만 효과가 없었습니다. 이것은 매력처럼 작동했습니다. 감사합니다 많이 @ 존
Strabek

이것이 올바른 방법입니다. 비파괴 적이며 전체 역사를 보존합니다
Nitin Bansal

이것은 나를 위해 작동하지 않습니다. 나는 어떤 문제없이 처음 3 개 명령을 실행할 수 있지만 내가 할 때 cat ~/diff.patch | git apply, 그것은 나에게 말한다 error: unrecognized input. 어떤 생각? @NitinBansal 아마도 최근에 댓글을 단 이후로?
Experience111
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.