your programing

Git에서 SHA 해시로 커밋으로 되 돌리시겠습니까?

lovepro 2020. 10. 3. 11:25
반응형

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

그리고 사이의 모든 커밋 돌아갑니다 56e05fHEAD(범위의 시작 지점 제외를 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 --hardgit 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

반응형