2014-02-12 2 views
1

커밋 이전으로 되돌려 야하지만, 커밋 이후 변경된 내용이 프로덕션으로 푸시되었으므로 git reset으로 저장소 내역을 삭제할 수 없습니다.비파괴로 이전 커밋으로 되 돌림

과거 커밋으로 되 돌리는 작업은 herehere으로 처리되었지만 만족스러운 비파괴적인 솔루션을 제공하지는 못합니다.

우리는 별도의 지점에서 이전 커밋을 체크 아웃하여 @Ben's answer을 따르려고했으나 마스터에 병합하려고 시도했을 때 "이미 최신"이 표시됩니다. 메시지가 나타나고 아무 일도 일어나지 않습니다.

$ git checkout 0766c053 -b reverted 
$ git checkout master 
$ git merge reverted 
Already up-to-date. 
+0

''git revert'에서 정확히 무엇이 만족스럽지 않으십니까? 정확히 네가 찾고있는 것 같아. – Amadan

+0

@ Amadan-'git revert'는 특정 커밋 하나만 되돌리고 그 이후 커밋은 무시합니다. 이전 커밋으로 되돌릴 필요가 있습니다. 자식은'자식 되돌리기 --to' 기능을 가지고 있지 않습니다. – Yarin

+1

아 아하. 이 경우 도움이됩니다. http://stackoverflow.com/a/1470452/240443 – Amadan

답변

4

내가 그것을 가지고, @Amadan로부터 벌금 answer을 준 후 삭제 멀리 가서 수줍어 신비 @BobSlocum,이 link 덕분에 ... 여기

은 당신이해야 할 모든입니다 :

git revert --no-commit 0766c053..HEAD 

이렇게하면 HEAD에서 커밋 해시로 되돌아갑니다. (--no-commit 플래그를 사용하면 git은 모든 커밋을 한번에 되돌릴 수 있습니다.

+1

@ Amadan의 링크는 내가 말한 것을 설명하는 데 더 효과적이었습니다. 그의 영광을 상어려는 것처럼 보이지 않았다. :) –

+1

걱정 마세요. :) +1, 적절한 답을 썼습니다. 또한 주목할만한 것은 일반적인 구문입니다 : X에서 Y로 모든 것을 되돌리려면 'X^.. Y'가 작동합니다. ('X..Y'는 X 자체가 아닌 * X 이후 모든 것을 되돌릴 것이다.) – Amadan

0

사람은 의심의 여지가 그것을 할 수있는 git reset 순서를 요리 할 수 ​​있지만, 여기에 직접적인 경로입니다 :

git checkout -B master $(
     git commit-tree -p master -m - 0766c053^{tree} 
) 

git commit --amend 그것을 커밋 메시지를 추가 할 수는.

관련 문제