reset 및 revert를 사용하여 Git에서 푸시된 커밋 실행 취소
Git의 원격 저장소에서 푸시된 커밋을 취소하는 세 가지 방법을 보여줍니다. 이를 위해 git reset
, revert
및 checkout
명령을 사용합니다.
git reset
을 사용하면 저장소 기록에서 원치 않는 커밋의 흔적도 제거합니다. 그러나 git revert
를 사용하면 원본 커밋과 실행 취소 커밋이 모두 기록에 남습니다.
git checkout
을 사용하면 새 분기에서 변경 사항을 취소합니다.
git reset
명령으로 푸시된 커밋 실행 취소
undo_pushed_commits_local
저장소를 만들고 몇 가지 건강한(좋은) 커밋으로 채웁니다.
mkdir undo_pushed_commits_local
git init
그런 다음 파일을 추가/수정합니다.
git add --all
git commit -m "Make healthy commit"
더 많은 파일을 추가/수정합니다.
git add -all
git commit -m "Make another healthy commit"
이제 이 커밋을 GitHub의 undo-pushed-commits-remote
리포지토리로 푸시합니다.
git remote add undo-remote git@github.com:danielturidandy/undo-pushed-commits-remote.git
git push undo-remote master
이제 원격 저장소에 두 개의 커밋이 있습니다.
이제 나쁜 커밋을 해보자.
echo "This is a bad addition" >> file1.txt
echo "This is a bad addition" >> file2.txt
git add -all
git commit -m "Make a bad commit"
이 커밋을 원격 저장소에 푸시합니다.
git push undo-remote
리모컨에 잘못된 커밋이 있습니다.
이제 로컬 저장소의 마지막 좋은 커밋으로 재설정합니다. 커밋 기록에서 잘못된 커밋의 흔적을 제거하기 위해 --hard
옵션을 사용합니다.
git log
git reset --hard <SHA of the last good commit>
푸시를 강제 실행하기 위해 -f 옵션을 사용하여 로컬을 원격 저장소로 푸시
합니다.
git push -f undo-remote
이 방법은 개인 리포지토리 또는 소규모 팀이 있는 리포지토리에서 가장 잘 작동합니다.
일부 개발자가 잘못된 커밋을 푸시한 후 좋은 상태로 재설정하기 전에 원격 환경을 로컬 환경으로 가져오면 대규모 팀에서 문제에 직면할 수 있습니다. 저장소를 “수정"하기 위한 잘못된 커밋 정보가 포함된 커밋 기록이 없습니다.
git revert
명령으로 푸시된 커밋 실행 취소
여기에서 원격 저장소에 4개의 잘못된 커밋을 푸시했습니다.
되돌리기
를 사용하여 단일 잘못된 커밋이나 잘못된 커밋 범위를 취소할 수 있습니다.
‘되돌리기’는 원치 않는 커밋을 되돌리는 새 커밋을 만듭니다. 원본 커밋과 역 커밋 모두 리포지토리 기록에 남습니다.
revert
로 단일 푸시 커밋 실행 취소
git revert <SHA of the commit we want to revert>
이제 이 변경 사항을 원격 저장소에 푸시합니다. 충돌이 발생하지 않도록 -f 플래그를 사용하는 것을 잊지 마십시오.
git push -f undo-remote
이제 원격 저장소에 잘못된 커밋을 되돌리는 새 커밋이 있습니다.
revert
를 사용하여 푸시된 커밋 범위 실행 취소
git revert <SHA of the oldest commit to revert>..<SHA of the newest commit to revert>
이렇게 하면 제공된 범위의 모든 커밋이 되돌려집니다(가장 오래된 커밋은 포함하지 않지만 사용하는 버전/플랫폼에 따라 다를 수 있음).
이제 -f 플래그를 사용하여 변경 사항을 원격으로 푸시합니다.
git push -f undo-remote
이 방법은 대규모 팀이 작업하는 공개 리포지토리에 적합합니다. 나쁜 커밋과 실행 취소 커밋이 모두 기록에 남아 있기 때문에 개발자는 모든 잘못된 푸시/되돌리기로 로컬 리포지토리를 업데이트할 수 있습니다.
git checkout
명령으로 푸시된 커밋 실행 취소
이 기술은 잘못된 커밋 없이 새 분기를 분기하는 빠른 해킹입니다. 작은 코드베이스와 시간이 부족한 경우에 좋습니다.
우리는 마지막으로 좋은 커밋을 먼저 체크아웃
합니다.
git checkout <SHA of last known good commit>
그런 다음 저장소 기록에서 마지막으로 알려진 양호한 커밋에서 분리된 HEAD 상태에 도달합니다.
이제 이 상태에서 새 분기를 분기합니다.
git checkout -b branch_without_badcommits
그런 다음 원격으로 새 분기로 푸시합니다.
git push -f undo-remote branch_without_badcommits
원격 저장소에는 이제 잘못된 커밋이 없는 새 분기가 있습니다.