reset 및 revert를 사용하여 Git에서 푸시된 커밋 실행 취소

Ankit Raj Goyal 2023년1월30일
  1. git reset 명령으로 푸시된 커밋 실행 취소
  2. git revert 명령으로 푸시된 커밋 실행 취소
  3. git checkout 명령으로 푸시된 커밋 실행 취소
reset 및 revert를 사용하여 Git에서 푸시된 커밋 실행 취소

Git의 원격 저장소에서 푸시된 커밋을 취소하는 세 가지 방법을 보여줍니다. 이를 위해 git reset, revertcheckout 명령을 사용합니다.

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개의 잘못된 커밋을 푸시했습니다.

원격으로 푸시된 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

잘못된 커밋 없이 새 분기 만들기 및 푸시

원격 저장소에는 이제 잘못된 커밋이 없는 새 분기가 있습니다.

원격 저장소에 잘못된 커밋이 없는 새 분기가 있습니다

관련 문장 - Git Undo