원격 Git 저장소 롤백


111

원격 Git 저장소가 있고 마지막 n커밋을 차가운 망각으로 롤백해야합니다 .

답변:


135

git revert <commit>…모든 n 커밋에 대해 사용한 다음 평소와 같이 푸시하여 기록을 변경하지 않고 유지할 수 있습니다.

또는로 "롤백"할 수 있습니다 git reset --hard HEAD~n. 공개 또는 공유 저장소에서 푸시하는 경우 원래 브랜치를 기반으로 다른 작업을 분산시키고 중단시킬 수 있습니다. Git은 그렇게하는 것을 방지하지만 git push -f업데이트를 강제하는 데 사용할 수 있습니다 .


5
다음을 사용하여 특정 커밋으로 롤백 할 수 있습니다. git reset --hard [sha1]여기서 sha1은 커밋 해시 식별자입니다.
pisaruk

7
작업 디렉토리가 없으므로 원격 저장소에서 get reset --hard를 사용할 수 없습니다. 원래 질문은 원격 저장소가 있음을 나타내며 로컬 저장소에 대한 언급은 없습니다.
Hazok

2
참고로 git push -f는 모든 로컬 브랜치를 원격으로 강제 푸시합니다
cowlinator

을 사용 revert하면 기능 분기가 "이미"병합 된 것으로 처리 된다는 점을 명심 하십시오. 이는 이러한 분기 실제로 병합 되기 때문 입니다. 그러나 변경 사항은 되돌 렸습니다. 해결책 : 되돌리기 커밋을 선택 하거나 되돌 립니다.
Benedikt

@Benedikt로 reset --hard인해 기능 분기가 이미 병합 된 것으로 처리됩니까? 내 가정은 그렇지 않을 revert것입니다.
Marcus Leon

37

elmarco가 맞습니다. 그의 제안은 공유 / 공용 저장소 (또는 적어도 공용 지점)에 가장 적합합니다. 공유되지 않은 경우 (또는 다른 사람을 방해하려는 경우) 특정 참조를 푸시 할 수도 있습니다.

git push origin old_master:master

또는 특정 커밋 SHA1 (약식으로 1e4f99e)이있는 경우 다음으로 돌아가고 싶습니다.

git push origin 1e4f99e:master

9

다행히도 저는 원하지 않는 커밋을 완전히 제거하는 Pat Notz의 솔루션 을 사용할 수있는 위치에 있었습니다. 그러나 처음에는 오류가 발생했습니다.

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

그러나 강제 ( -f) 옵션을 추가하면 이 오류를 덮어 씁니다.

git push -f origin 52e36b294e:master

3

원격 저장소에 직접 액세스 할 수있는 경우 항상 다음을 사용할 수 있습니다.

git reset --soft <sha1>

존재하지 않는 작업 디렉토리를 수정하려는 시도가 없기 때문에 작동합니다. 자세한 내용은 원래 답변을 참조하십시오.

git bare 저장소에서 마지막 커밋을 어떻게 해제 할 수 있습니까?


2
--soft필요할까요? git resetmode 플래그없이 plain으로도 똑같은 일을 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.