[git] 공개 리포지토리에서 이전 Git 커밋으로 롤백

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”를 사용할 수 있습니다

Git 리포지토리를 이전 커밋으로 되 돌리는 방법은 무엇입니까?


답변

글쎄, 질문은 ‘롤백’이 무슨 뜻입니까? 당신이 할 수없는 경우 reset는 공공 그리고 당신은 그대로 역사를 커밋 유지하려는 때문에, 당신은 당신이 당신의 작업 복사본이 특정 커밋 반영하려는 의미합니까? git checkout커밋 해시를 사용하십시오 .

편집 : 의견에서 지적했듯이 git checkout분기를 지정하지 않고 사용 하면 “분기 없음”상태가됩니다. 사용 git checkout <commit> -b <branchname>지점에, 또는 체크 아웃에 git checkout <commit> .현재의 지점에 체크 아웃.


답변

원래 포스터는 다음과 같이 말합니다.

누군가 나에게 줄 수있는 가장 좋은 대답 git revert은 원하는 커밋에 도달 할 때까지 X 번 을 사용하는 것이 었습니다 .

그래서 20 커밋 된 커밋으로 되돌리려면 20 번 실행해야한다고 가정 해 봅시다.

더 쉬운 방법이 있습니까?

이 저장소가 공개되어 있기 때문에 재설정을 사용할 수 없습니다.

git revertX 번 을 사용할 필요는 없습니다 . 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 revertgit 버전 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마치면됩니다.


답변

HEAD 분리 모드를 원하십니까?

DETACHED HEAD를 사용하여 X 커밋을 특정 커밋으로 롤백하려면 (아무것도 엉망으로 만들 수 없음을 의미) 반드시 다음을 사용하십시오.

(X를 당신이 돌아가고 싶은 커밋 수로 대체하십시오)

git checkout HEAD~X

한 커밋으로 돌아가는 IE :

git checkout HEAD~1