git 에서 특정 커밋으로 롤백하는 방법은 무엇입니까?
누군가 나에게 줄 수있는 가장 좋은 대답 git revert
은 원하는 커밋에 도달 할 때까지 X 번 을 사용하는 것이 었습니다 .
그래서 20 커밋 된 커밋으로 되돌리려면 20 번 실행해야한다고 가정 해 봅시다.
더 쉬운 방법이 있습니까?
이 저장소가 공개되어 있기 때문에 재설정을 사용할 수 없습니다.
git 에서 특정 커밋으로 롤백하는 방법은 무엇입니까?
누군가 나에게 줄 수있는 가장 좋은 대답 git revert
은 원하는 커밋에 도달 할 때까지 X 번 을 사용하는 것이 었습니다 .
그래서 20 커밋 된 커밋으로 되돌리려면 20 번 실행해야한다고 가정 해 봅시다.
더 쉬운 방법이 있습니까?
이 저장소가 공개되어 있기 때문에 재설정을 사용할 수 없습니다.
답변:
이 시도:
git checkout [revision] .
[revision]
커밋 해시는 어디에 있습니까 (예 :) 12345678901234567890123456789012345678ab
.
.
끝 부분을 잊지 말고 매우 중요합니다. 전체 트리에 변경 사항이 적용됩니다. git project root에서이 명령을 실행해야합니다. 서브 디렉토리에 있으면이 명령은 현재 디렉토리의 파일 만 변경합니다. 그런 다음 커밋하고 잘해야합니다.
이 방법으로 취소 할 수 있습니다
git reset --hard
작업 디렉토리 및 준비 영역에서 모든 수정 사항이 삭제됩니다.
특정 커밋으로 롤백하려면
git reset --hard commit_sha
10 개의 커밋을 롤백하려면 :
git reset --hard HEAD~10
기록을 다시 쓰지 않으려면 다음 게시물과 같이 "git revert"를 사용할 수 있습니다
글쎄, 질문은 '롤백'이 무슨 뜻입니까? 당신이 할 수없는 경우 reset
는 공공 그리고 당신은 그대로 역사를 커밋 유지하려는 때문에, 당신은 당신이 당신의 작업 복사본이 특정 커밋 반영하려는 의미합니까? git checkout
커밋 해시를 사용하십시오 .
편집 : 의견에서 지적했듯이 git checkout
분기를 지정하지 않고 사용 하면 "분기 없음"상태가됩니다. 사용 git checkout <commit> -b <branchname>
지점에, 또는 체크 아웃에 git checkout <commit> .
현재의 지점에 체크 아웃.
git checkout
-그는 그가 원하는 모든 지점 (현재 또는 새로운)을 자유롭게 체크 아웃 할 수 있습니다. 모호하지 않도록 답변을 업데이트하겠습니다.
git reset
하는 경우 원하지 않는 파일을 삭제 해야 합니다. 별도의 브랜치로 시도하십시오. git checkout <commit> -b <branchname>
, 해당 브랜치에 정체 파일이 없습니다 .
원래 포스터는 다음과 같이 말합니다.
누군가 나에게 줄 수있는 가장 좋은 대답
git revert
은 원하는 커밋에 도달 할 때까지 X 번 을 사용하는 것이 었습니다 .그래서 20 커밋 된 커밋으로 되돌리려면 20 번 실행해야한다고 가정 해 봅시다.
더 쉬운 방법이 있습니까?
이 저장소가 공개되어 있기 때문에 재설정을 사용할 수 없습니다.
git revert
X 번 을 사용할 필요는 없습니다 . git revert
커밋 범위를 인수로 받아 들일 수 있으므로 한 번만 사용하여 커밋 범위를 되돌릴 수 있습니다. 예를 들어, 마지막 20 개의 커밋을 되돌리려면 다음을 수행하십시오.
git revert --no-edit HEAD~20..
커밋 범위 HEAD~20..
는 짧으며 HEAD~20..HEAD
" HEAD 커밋 의 20 번째 부모 에서 시작하여 커밋 범위 를 HEAD까지 되돌립니다"를 의미합니다.
병합 커밋이 없다고 가정하면 지난 20 개의 커밋을 되돌 립니다. 병합 커밋이있는 경우 하나의 명령으로 모두 커밋 할 수 없으므로 다음과 같이 개별 커밋해야합니다
git revert -m 1 <merge-commit>
또한 git revert
git 버전 1.9.0 을 사용하여 범위를 사용하여 테스트했습니다 . 이전 버전의 git을 사용하는 경우 범위를 사용 git revert
하거나 작동하지 않을 수 있습니다.
이 경우 git revert
보다 선호됩니다 git checkout
.
참고는 달리 사용 말합니다이 답변git checkout
, git revert
실제로 당신이 복귀하고 있다는 커밋의에서 추가 된 파일을 제거합니다 이에게 개정의 범위를 되돌릴 수있는 올바른 방법을 만드는을.
1 단계 : 커밋 목록 가져 오기 :
git log
이 예제와 같이 목록이 표시됩니다.
[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date: Fri Jul 8 23:42:22 2016 +0300
This is last commit message
commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date: Fri Jun 24 20:20:24 2016 +0300
This is previous commit message
commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date: Thu Jun 23 00:41:55 2016 +0300
This is previous previous commit message
...
2 단계 : 필요한 커밋 해시를 복사하여 체크 아웃하기 위해 붙여 넣기
git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f
그게 다야.
git read-tree -um @ $commit_to_revert_to
할 것입니다. "git checkout"이지만 HEAD를 업데이트하지 않습니다.
같은 효과를 얻을 수 있습니다
git checkout $commit_to_revert_to
git reset --soft @{1}
편의 명령을 함께 묶는 것을 선호하는 경우.
이것들은 원하는 상태로 작업 트리와 색인을 남기고 git commit
마치면됩니다.
DETACHED HEAD를 사용하여 X 커밋을 특정 커밋으로 롤백하려면 (아무것도 엉망으로 만들 수 없음을 의미) 반드시 다음을 사용하십시오.
(X를 당신이 돌아가고 싶은 커밋 수로 대체하십시오)
git checkout HEAD~X
한 커밋으로 돌아가는 IE :
git checkout HEAD~1
프로젝트를 수행하고 하루 정도 후에 작업한다고 가정 해 봅시다. 하나의 기능으로 여전히 오류가 발생합니다. 그러나 오류가 발생한 변경 내용을 모릅니다. 따라서 이전 작업 커밋을 피싱해야합니다. 특정 커밋으로 되돌리려면
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
좋아, 그래서 커밋이 당신을 위해 작동합니다. 더 이상 오류가 없습니다. 문제를 정확히 지적했습니다. 이제 최신 커밋으로 돌아갈 수 있습니다.
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
오류가 발생하기 전에 특정 파일을 체크 아웃하십시오 (제 경우에는 Gemfile.lock 예제를 사용합니다).
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock
그리고 이것은 나중에까지 오류를 인식하지 않고 커밋에서 만든 오류를 처리하는 한 가지 방법입니다.
변경된 내용을 잘 모르겠지만 옵션없이 특정 커밋을 체크 아웃 할 수 없습니다 --detach
. 나를 위해 일한 전체 명령은 다음과 같습니다.
git checkout --detach [commit hash]
분리 된 상태에서 돌아가려면 로컬 지점을 체크 아웃해야했습니다. git checkout master
master
되는 문제를 해결합니다.git reset --hard
git checkout -- .