개발관련/Git

변경 사항을 잃지 않고 마지막 푸시되지 않은 git 커밋을 해제하는 방법

Rateye 2021. 10. 19. 11:28
728x90
반응형

질문 : 변경 사항을 잃지 않고 마지막 푸시되지 않은 git 커밋을 해제하는 방법

내 로컬 복사본이 해당 커밋의 변경 사항을 유지하지만 작업 복사본에서 커밋되지 않은 변경 사항이되도록 커밋을 되 돌리는 방법이 있습니까? 커밋을 롤백하면 이전 커밋으로 이동합니다. 변경 사항을 유지하고 싶지만 잘못된 브랜치에 커밋했습니다.

이것은 푸시 된 것이 아니라 커밋 된 것뿐입니다.

답변

이를 수행하는 방법에는 여러 가지가 있습니다. 예를 들면 다음과 같습니다.

경우에 당신은 아직 공개적으로 커밋 밀어하지 않은 :

git reset HEAD~1 --soft   

즉, 커밋 변경 사항은 작업 디렉토리에있는 반면 LAST 커밋은 현재 브랜치에서 제거됩니다. git reset man 참조

경우에 당신은 ( '마스터'라는 분기)에 공개적으로 추진했다 :

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

커밋을 정상적으로 되돌리고 푸시

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

이제 작업 복사본의 로컬 변경 사항을 변경하려면 ( "로컬 복사본이 해당 커밋의 변경 사항을 유지하도록")--- --no-commit 옵션을 사용하여 커밋 되돌리기를 되돌립니다.

git revert --no-commit 86b48ba (hash of the revert commit).

저는 작은 예를 만들었습니다 : https://github.com/Isantipov/git-revert/commits/master

출처 : https://stackoverflow.com/questions/19859486/how-to-un-commit-last-un-pushed-git-commit-without-losing-the-changes
728x90
반응형