Programing

성공적인 "git cherry-pick"을 실행 취소하는 방법은 무엇입니까?

lottogame 2020. 10. 17. 08:58
반응형

성공적인 "git cherry-pick"을 실행 취소하는 방법은 무엇입니까?


로컬 저장소에서 git cherry-pick SHA충돌이나 문제없이 방금 실행했습니다 . 그리고 나서 방금 한 일을하고 싶지 않다는 것을 깨달았습니다. 나는 이것을 아무데도 밀지 않았다.

이 체리 픽만 어떻게 제거 할 수 있습니까?

이 작업을 수행하는 방법이 있는지 알고 싶습니다.

  • 다른 지역 변경이있을 때
  • 다른 지역 변경 사항이 없을 때

가능하면 두 경우 모두에 대해 하나의 명령을 사용하는 것이 좋습니다.


체리 픽은 기본적으로 커밋이므로 실행 취소하려면 커밋을 실행 취소하면됩니다.

다른 지역 변경이있을 때

커밋을 재설정 한 후 다시 적용 할 수 있도록 현재 변경 사항을 숨 깁니다.

$ git stash
$ git reset --hard HEAD^
$ git stash pop  # or `git stash apply`, if you want to keep the changeset in the stash

다른 지역 변경 사항이 없을 때

$ git reset --hard HEAD^

마지막 커밋을 취소하려면 간단히 git reset --hard HEAD~.

편집 :이 답변은 로컬 변경 사항 보존을 언급하지 않은 이전 버전의 질문에 적용되었습니다. Tim의 대답은 실제로 올바른 것입니다. 머리 위로 qwertzguy에게 감사드립니다.


가능하면 하드 리셋을 피하십시오. 하드 리셋은 git에서 매우 적은 파괴적인 작업 중 하나입니다. 다행히도 재설정없이 체리 픽을 취소하고 파괴적인 것을 피할 수 있습니다.

실행 취소하려는 체리 픽의 해시를 기록해 둡니다 ${bad_cherrypick}. 를 수행합니다 git revert ${bad_cherrypick}. 이제 작업 트리의 내용은 나쁜 체리 선택 이전과 같습니다.

을 반복 git cherry-pick ${wanted_commit}하고 새로운 체리 픽이 마음에 들면 git rebase -i ${bad_cherrypick}~1. 리베이스 중에 둘 다 삭제 ${bad_cherrypick}하고 해당 되돌리기를 수행하십시오.

당신이 작업하고있는 지점은 좋은 체리 픽만을 가질 것입니다. 재설정이 필요하지 않습니다!


이 동일한 문제에 직면하여 성공적인 체리 픽 이후 커밋 및 / 또는 원격으로 푸시 한 경우 제거하고 싶다면 다음을 실행하여 체리 픽의 SHA를 찾을 수 있음을 발견했습니다.

git log --graph --decorate --oneline

그런 다음 ( :wq로그를 종료하기 위해 사용한 후 ) 체리 픽을 제거 할 수 있습니다.

git rebase -p --onto YOUR_SHA_HERE^ YOUR_SHA_HERE

여기서 YOUR_SHA_HERE체리 선택 커밋의 40 자 또는 약식 7 자 SHA와 같습니다.

처음에는 원격 리포지토리와 로컬 리포지토리가 서로 다른 커밋 이력을 가지므로 변경 사항을 푸시 할 수 없습니다. 다음을 사용하여 로컬 커밋을 강제로 원격에있는 것을 대체 할 수 있습니다.

git push --force origin YOUR_REPO_NAME

( Seth Robertson 의이 솔루션을 적용했습니다 . "전체 커밋 제거"를 참조하십시오.)


git reflog 당신의 구조에 올 수 있습니다.

콘솔에 입력하면 SHA-1을 나타내는 git 내역 목록이 표시됩니다.

되돌리려는 SHA-1을 확인하기 만하면됩니다.


하나의 명령이며 파괴적인 명령을 사용 하지 않습니다git reset .

GIT_SEQUENCE_EDITOR="sed -i 's/pick/d/'" git rebase -i HEAD~ --autostash

단순히 커밋을 삭제하고 로컬 변경 사항이 있더라도 체리 선택 이전의 상태로 정확하게 되돌립니다.

참고 URL : https://stackoverflow.com/questions/30986376/how-to-undo-a-successful-git-cherry-pick

반응형