2011-03-21 5 views
32

나는 자식의 작동 방식에 익숙하지 않다. 나는 실수로 저지른 것을 되돌리고 그것을 되 돌리고 싶다. 내가했던어떻게 git에서 커밋을 뒤집을 수 있습니까?

git reset --hard HEAD~1 

연구원 Google 직원주의 :이 단지 커밋 되돌릴 수 있지만, 모든 파일 변경을 폐기하지 않습니다!

이제 프로젝트는 내 컴퓨터에서 되돌아 가고 github에서는 되돌릴 수 없습니다. 이 코드를 밀어 넣으려고하면 '분기가'origin/master '뒤에 1 커밋만큼 빠르며 빨리 감기가 될 수 있습니다.'라는 오류 메시지가 나타납니다. github에서이 커밋을 어떻게 제거합니까?

+0

git push -f가 트릭을했습니다. 감사. – David

+0

빠른 전달 메시지는 힌트 일뿐 실제 오류는 아닙니다. 각 커밋 후에 '푸시'하지 않으면 정상적인 메시지입니다. – eckes

답변

26

git push --force 할 수 있지만 기록을 다시 쓰고 있으며 repo를 사용하는 모든 사람이 문제가 있음을 알고 있어야합니다.

이 문제를 방지하려면, 다시 사용할 수 있지만, 대신 git revert

+4

일반적으로 역사를 다시 작성하는 것은 좋은 생각이 아니라 특히 공유 환경에서 이루어집니다. '자식 되돌리기'로 가십시오. – trimbletodd

-5

git push -f 어쩌면?

man git-push 더 알려드립니다.

2

복귀 커밋을 푸시해야한다고 생각합니다. 그래서 pull을 다시 github에서 되돌리고 싶은 커밋을 포함하여 git revert을 사용하고 결과를 푸시하십시오.

github 저장소의 다른 사람들의 복제가 문제가되지 않는다면 reset : git push origin :master 뒤에 github의 master 분기를 삭제하고 다시 만들 수 있습니다.

5

다른 답변에 대한 답변을 드릴 수 없으므로 약간의 추가 정보를 제공해 드리겠습니다.

revert 마지막 커밋을 원하면 git revert head을 사용할 수 있습니다. head은 지사에서 가장 최근의 커밋을 나타냅니다.

이유 reset는 "후 커밋의 모든 변경 사항을 제거"하는 힘내을 말하고있다이다 사용할 때 head~1를 사용 (reset --hard) (head~1) "를 머리 전에 한 커밋".

resetrevert은 커밋에이다-이 저지된다.

AmpT가 지적한 것처럼 head에서 얼마나 멀리 떨어져 있는지 계산하는 대신 커밋 SHA를 사용하여 식별 할 수 있습니다. SHA는 로그 (git log)와 다양한 다른 방법에서 찾을 수 있습니다.

힘내에서 다른 포인터를 사용할 수도 있습니다. 예 : 태그 또는 분기. 그리고이 모든 재미를 다른 방법을 사용하여 커밋을 참조 할 수도 있습니다. https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html#_specifying_revisions

관련 문제