2012-03-16 4 views

답변

3

나는 로컬 롤백하고 결과를 밀어 수 있다고 생각 :

'REMOTE'는 원격 이름입니다
$ git reset HEAD^ --hard 
$ git push REMOTE -f 

.

+3

그럴 수는 있지만, 그 동안에 다른 사람이 커밋을했기 때문에 권할 수는 없습니다 ... 나쁜 말을 피하기 위해 "그들은 당신의 행동에서 회복하기 위해 열심히 노력해야 할 것입니다 . " :-) "git revert"를 사용하여 이전 커밋을 취소하는 새 커밋을 추가하는 것이 좋습니다. ("되돌리기"를 "이전 커밋을 완전히 취소하는 동작 인 커밋을 추가하십시오"라고 생각하십시오.) – torek

+0

@torek 처음에는 이것을 생각하고 있었지만 shadowfax가 다른 것을 가질 수 있다고 생각합니다. 목적으로, 모든 원격 커밋이 올바르게 실행될 수 있도록 유지하는 것과 같이, 그렇지 않으면 '되돌리기와 밀기'를 생각했을 것입니다. – peter

+1

얼마나 많은 사람들이 '자식 되돌리기'를 이해하지 못하는지 놀랄지도 모른다.다른 한편으로는 완전히 다른 동기가있을 수 있습니다 (David M. Syzdek의 대답과 같습니다). 어떤 경우에는 좋은 해결책이없고, 가장 나쁜 것만이 있습니다 (상황마다 다릅니다). – torek

27

이미 원격 저장소에 커밋을 밀어 넣었으므로 가장 좋은 방법은 두 커밋을 되돌릴 수 있으므로 이미 원격 리포지토리에서 가져온 모든 사람에게 문제가 발생하지 않도록하는 것입니다. 당신이 '돈 경우, 또는

git revert e512d38 
git revert bd89039 

:

예는 커밋 다음 역사 사용 : 당신은 단지 역사를 수정하지 않고 커밋을 되돌리려면

e512d38 Adding taunts to management. 
bd89039 Adding kill switch in case I'm fired. 
da8af4d Adding performance optimizations to master loop. 
db0c012 Fixing bug in the doohickey 

을, 다음을 수행 할 수 있습니다 다른 사용자가 kill 스위치를 추가 한 다음 제거한 것을보고 싶으면 다음을 사용하여 저장소를 롤백 할 수 있습니다. 그러나 이미 원격지에서 변경 사항을 가져온 다른 사용자에게 문제가 발생할 수 있습니다.

git reset --hard da8af4d 
git push origin -f localBranch:remoteBranch 

여기서 localBranch은 로컬 분기의 이름이고 remoteBranch은 원격 분기의 이름입니다.

+3

"경영진에 조롱 거리를 추가하면"오래된 (새로운?) 경구가 생깁니다. 술 마시지 마십시오. :-) – torek

+6

@torek 내가 말할 수있는 것은, 나는 헌신적 인 술꾼이고 술 마시는 사람이다. –

0

먼저이 명령을 입력하십시오.

git log -n 4 

이 명령은 마지막 4 개의 커밋을 해당 SHA와 함께 표시합니다. 다음에 다음 명령을 입력하십시오.

git rebase -i SHA_ID 

SHA_ID 대신 삭제하려는 커밋 이전의 커밋의 SHA를 입력하십시오.

파일이 열리면 해당 파일의 맨 위에 SHA와 삭제할 커밋 메시지가 나타납니다. 이 행을 삭제하고 저장하고 파일에서 빠져 나오십시오.

이 작업을 수행하면 푸시해야합니다. 그래서 다음 명령을 입력하십시오.

git push -f origin master 

이 작업을 완료하면 커밋이 삭제 된 것을 알 수 있습니다.

관련 문제