Git에서 SHA 해시로 커밋으로 되 돌리시겠습니까? [복제]
이 질문에 이미 답변이 있습니다.
어떻게 git revert
작동 하는지 명확하지 않습니다 . 예를 들어, 머리 뒤에있는 커밋 6 개로 되돌리고 중간 커밋의 모든 변경 사항을 되돌리고 싶습니다.
그 말 SHA의 해시입니다 56e05fced214c44a37759efa2dfc25a65d8ae98d
. 그런 다음 왜 다음과 같이 할 수 없습니까?
git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
다른 커밋에서 정확한 상태로 현재 HEAD 위에 커밋하고 모든 중간 커밋을 실행 취소하려면을 사용 reset
하여 커밋을 만들기 위해 인덱스의 올바른 상태를 만들 수 있습니다 .
# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced
# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
무엇 이눔 아 - 되돌리기 않는 것은이 주어진 커밋의 역 (물론, 상호) 인 커밋 만들기, 주어진 커밋에서 만든있는 상태 해제 변경 내용을 커밋 만드는 것입니다. 따라서
git revert <SHA-1>
작동해야하고 작동합니다.
지정된 커밋으로 되감기를 원하고 히스토리의이 부분이 아직 게시되지 않았기 때문에이를 수행 할 수있는 경우 git-revert가 아닌 git- reset 을 사용해야합니다 .
git reset --hard <SHA-1>
( --hard
작업 디렉토리에서 커밋되지 않은 변경 사항을 잃게됩니다.)
추가 참고 사항
그건 그렇고, 분명하지 않을 수도 있지만 문서에 <commit>
또는 <commit-ish>
(또는 <object>
) 라고 표시된 모든 곳 에서 커밋 의 SHA-1 식별자 (전체 또는 단축)를 넣을 수 있습니다 .
말한 커밋을 되돌립니다. 즉, 그 반대의 커밋을 추가합니다. 이전 개정판을 체크 아웃하려면 다음을 수행하십시오.
git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
특정 커밋으로 롤백하는 가장 좋은 방법은 다음과 같습니다.
git reset --hard <commit-id>
그때:
git push <reponame> -f
변경 사항이 이미 푸시 된 경우 공개, 공유 원격, 당신은 사이의 모든 커밋을 되돌리려 HEAD
하고 <sha-id>
, 당신이 범위를 저지 전달할 수 있습니다 git revert
,
git revert 56e05f..HEAD
그리고 사이의 모든 커밋 돌아갑니다 56e05f
및 HEAD
(범위의 시작 지점 제외를 56e05f
).
업데이트 :
이 대답은 내 대답보다 간단합니다. https://stackoverflow.com/a/21718540/541862
원래 답변 :
# Create a backup of master branch
git branch backup_master
# Point master to '56e05fce' and
# make working directory the same with '56e05fce'
git reset --hard 56e05fce
# Point master back to 'backup_master' and
# leave working directory the same with '56e05fce'.
git reset --soft backup_master
# Now working directory is the same '56e05fce' and
# master points to the original revision. Then we create a commit.
git commit -a -m "Revert to 56e05fce"
# Delete unused branch
git branch -d backup_master
두 명령 git reset --hard
과 git reset --soft
여기에 마술입니다. 첫 번째는 작업 디렉토리를 변경하지만 헤드 (현재 분기)도 변경합니다. 우리는 두 번째로 머리를 고정합니다.
이것은 더 이해하기 쉽습니다.
git checkout 56e05fced -- .
git add .
git commit -m 'Revert to 56e05fced'
그리고 그것이 효과가 있음을 증명하기 위해 :
git diff 56e05fced
다음과 같이 간단해야합니다.
git reset --hard 56e05f
그러면 특정 시점으로 돌아갈 수 있습니다.
이것은 작동 할 수 있습니다.
git checkout 56e05f
echo ref: refs/heads/master > .git/HEAD
git commit
참고 URL : https://stackoverflow.com/questions/1895059/revert-to-a-commit-by-a-sha-hash-in-git
'your programing' 카테고리의 다른 글
잡아 당긴 텍스트를 Vim 명령 줄에 붙여 넣는 방법은 무엇입니까? (0) | 2020.10.03 |
---|---|
rm, cp, mv 명령에 대한 인수 목록이 너무 김 오류 (0) | 2020.10.03 |
디버그 빌드 전용 Visual Studio 빌드 후 이벤트를 실행하는 방법 (0) | 2020.10.03 |
Notepad ++에서 중복 행 제거 (0) | 2020.10.03 |
밀리 초 동안 절전 모드 (0) | 2020.10.03 |