롤백하 Git commit 공공 repo
-
18-09-2019 - |
문제
할 수 있는 방법에 대해 이동 회전시를 특정 git commit?
최고의 대답이 나를 사용하여 git revert
X 시간에 도달할 때까지 원다.
이렇게 말하고 싶으로 되돌리려면 commit 는 20 커밋 old,나는 그것을 실행 20 시간.
이 있는 쉬운 방법이 있을까요?
나는 사용할 수 없습 다시 설정이기 때문에 저장소입니다.
해결책
이 시도:
git checkout [revision] .
어디 [revision]
Commit 해시입니다 (예 : : 예 : : 12345678901234567890123456789012345678ab
).
잊지 마세요 .
결국, 매우 중요합니다. 이것은 전체 나무에 변경 사항을 적용합니다. GIT 프로젝트 루트 에서이 명령을 실행해야합니다. 하위 디렉토리에있는 경우이 명령은 현재 디렉토리의 파일 만 변경합니다. 그런 다음 커밋하면 좋을 것입니다.
당신은 이것을 취소 할 수 있습니다
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 revert
X 시간까지 나 에 도달하다.이렇게 말하고 싶으로 되돌리려면 commit 는 20 커밋 old,I'd 그것을 실행 20 시간.
이 있는 쉬운 방법이 있을까요?
나는 사용할 수 없습 리셋을 일으킬 이 repo 공개한다.
그것은 필요하지 않 사용 git revert
X 다. git revert
을 받아들일 수 있다
커밋한 범위로 인수,그래서 당신은 그것을 사용할 필요가면으로 되돌리려면 범위
의가한다. 예를 들어,만약 당신이 되돌리려는 지난 20 커밋:
git revert --no-edit HEAD~20..
Commit 범위 HEAD~20..
에 대한 짧 HEAD~20..HEAD
, 와 의미에서 시작"20th 부모의 머리 commit 및 모두 되돌리기 커밋한 후에 그것을 머리".
는 것으로 되돌리는 지난 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 단계: Commit의 페치 목록 :
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"이지만 헤드를 업데이트하지 않습니다.
동일한 효과를 얻을 수 있습니다
git checkout $commit_to_revert_to
git reset --soft @{1}
문자열 편의 명령을 함께 선호하는 경우.
이것들은 당신의 작업장과 원하는 상태에서 당신을 당신에게 남겨 둡니다. git commit
끝내기 위해.
무엇이 바뀌 었는지 잘 모르겠지만 옵션없이 특정 커밋을 체크 아웃 할 수 없습니다. --detach
. 나를 위해 일한 전체 명령은 다음과 같습니다.git checkout --detach [commit hash]
분리 된 상태에서 돌아 오려면 현지 지점을 확인해야했습니다. git checkout master
프로젝트와 하루 정도 후에 일한다고 가정 해 봅시다. 하나의 기능이 여전히 오류를 제공하고 있음을 알 수 있습니다. 그러나 당신은 당신이 어떤 변화를했는지 모르겠습니다. 그로 인해 오류가 발생했습니다. 따라서 이전 작업 커밋을 낚시해야합니다. 특정 커밋으로 되돌려면 :
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
좋아, 그래서 그 커밋은 당신을 위해 일합니다. 더 이상 오류가 없습니다. 당신은이 문제를 정확히 지적했습니다. 이제 최신 커밋으로 돌아갈 수 있습니다.
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
오류가 발생하기 전에 특정 파일을 확인합니다 (내 경우에는 gemfile.lock을 사용합니다).
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock
그리고 이것은 나중에 오류를 깨닫지 않고 커밋에서 만든 오류를 처리하는 한 가지 방법입니다.
헤드 분리 모드를 원하십니까?
분리 된 헤드로 특정 커밋으로 X 시간을 롤백하려면 (아무것도 엉망이 될 수 없음) 다음을 사용하십시오.
(돌아가고 싶은 커밋 수로 X를 교체하십시오)
git checkout HEAD~X
즉, 한 커밋으로 돌아 가기 위해 :
git checkout HEAD~1
다음은 그렇게 할 예입니다
cd /yourprojects/project-acme
git checkout efc11170c78 .
Github/Bitbucket/Gitlab의 Commits 섹션에서 각 커밋과 관련된 커밋 ID를 찾을 수 있습니다. 매우 간단합니다. 커밋 ID가 있다고 가정합니다 5889575 그런 다음 코드 에서이 부분으로 돌아 가려면 단순히 입력하면됩니다.
git checkout 5889575 .
코드에서 해당 시점에 도달합니다.