내가 밀지 않은 커밋이 2 개 있습니다.
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
첫 번째 것 (가장 오래된 것)을 어떻게 롤백 할 수 있습니까?
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
여기에서:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
그냥해야합니까 :
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
그건?
답변
가장 안전하고 깨끗한 방법은 대화식으로 리베이스하는 것입니다.
git rebase -i HEAD^^
또는,
git rebase -i baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e^
여기에서 커밋을 스쿼시 할 수 있으며, 이로 인해 하나 이상의 커밋이 이전 커밋에 합쳐집니다. 히스토리에서 커밋을 완전히 삭제하려면 목록에서 행을 삭제하십시오.
커밋을 되돌릴 수는 git revert
있지만 커밋 메시지를 기록에 추가하면 바람직하지 않을 수 있습니다. -n
매개 변수를 사용하여 Git에게 되돌리기를 즉시 커밋하지 말라고 지시하십시오. 대화식으로 리베이스하고 이전 커밋까지 스쿼시하여 물건을 깨끗하게 유지할 수 있습니다.
여기서 작업중인 두 커밋이 동일한 파일에 영향을 미치는 경우 병합 충돌이 발생할 수 있습니다.
리포지토리 재설정은 git reset --hard
취소 할 수 없으므로주의해서 수행해야합니다.
기록을 다시 작성하는 것은주의해서 수행해야합니다.
답변
이것은 http://nakkaya.com/2009/09/24/git-delete-last-commit/ 에서 온 경우 나를 위해 일한 경우
힘내 삭제 마지막 커밋
커피가 떨어졌을 때 밤 늦게 한 번, 나는 가지고 있지 않은 것들을 커밋합니다. 그런 다음 10 ~ 15 분 동안 인터넷에서 내가 마지막으로 저지른 커밋을 제거하는 방법을 사용합니다. 세 번째 시간이 지나서 나중에 참조 할 수 있도록 기록하고 싶었습니다.
정크를 커밋했지만 푸시하지 않은 경우
git reset --hard HEAD~1
HEAD ~ 1은 커밋 이전의 약칭입니다. 또는 재설정하려는 해시의 SHA-1을 참조 할 수 있습니다. –hard를 사용할 때 커밋 전 헤드 이후 손실 된 작업 트리에서 추적 된 파일에 대한 변경 사항이 있습니다.
수행 한 작업을
--soft
지우지 않으려면 커밋을 삭제하는 옵션을 사용할 수
있지만 git 상태에 따라 변경된 모든 파일을 “커밋 할 변경 사항”으로 남겨 둡니다.이제 당신이 이미 밀고 누군가가 내 경우 인 경우, git reset을 사용할 수 없습니다. 그러나 git revert를 할 수는 있지만
git revert HEAD
이것은 실수로 커밋 된 모든 것을 되 돌리는 새로운 커밋을 만듭니다.
답변
아니. git-reset –hard는 역사로 돌아올 것입니다. 당신이 찾고있는 것은 커밋을 취소하는 git revert입니다.
답변
방금이 작업을 수행했습니다.
git rebase -i HEAD^^
내가 망쳐 서 했어
git rebase --abort
그런 다음 다시했습니다. 그런 다음 다음과 같이 밀어야했습니다.
git push origin master -f
그리고 그것은 내가 롤백 한 커밋보다 새로운 커밋을 파괴했습니다. 잘 했어.
답변
아니오, 커밋 git reset --hard baf8d5e
을 삭제 3368e1c
하고 HEAD가 baf8d5e
나중에 있습니다.
3368e1c
커밋 을 유지하고 커밋을 삭제하려면 bad8d5e
가장 쉬운 해결책은 ” git rebase -i HEAD~2
“(즉, 마지막 두 커밋의 대화식 리베이스)를 수행하는 것입니다. 이 명령은 커밋 메시지 편집기를 시작하고 마지막 두 커밋 각각에 대해 한 줄을 표시합니다. bad8d5e
커밋 라인을 삭제 하고 저장하십시오. git은 당신의 역사를 다시 쓰고 2 번째 커밋은 사라질 것입니다.
당신이 좋아하는 커밋 메시지 편집기에서 사용할 수있는 다른 유용한 명령이 있습니다 squash
, edit
등 대화 형 REBASE이 매우 강력가!
누군가 이미 이러한 커밋을 본 경우 (저장소에서 푸시 또는 풀)이 작업을 수행하지 마십시오!
답변
git reset --hard
취소 할 수없는 것에 대한 jtimberman의 의견을 참조하면 이는 사실이 아닙니다. 여기를 참조하십시오 : https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1
답변
git reset --hard {ref}
리포지토리에 다른 커밋이 하나 뿐인 경우 (예 : 초기 커밋 및 1 개 이상) 커밋을 실행 취소하는 유일한 방법입니다. 나머지 방법 (revert, rebase)은 적어도 git 1.7.5.1에서 작동하지 않습니다.
당신을 따르는 경우에 git reset
로모그래퍼 git gc
실제로 삭제됩니다 후 자식 기존 완전히 REPO에서 데이터를 커밋합니다.