커밋, 푸쉬를 취소및 ADD 언스테이징을 해보자
들어가며
프로젝트 도중 민감한 정보가 올라간지 모르고 커밋을 하고 푸쉬를 하고 나서 롤백하려고 많은 삽질을 한 후에 해결방법을 작성했습니다.
add 언스테이징하기
위와 같이 현재 add.txt 파일이 스태이징 된 상태입니다. 언스테이징을하기 위해서는 다음과 같은 명령어를 통해서 언스태이징이 가능합니다.
git rest <언스테이징할 파일 경로 or 파일명>
명령어를 실행 시 빨간색으로 변하며 언스트이지 상태로 변하는 것을 볼 수 있습니다.
Commit 취소하기
//commit을 취소하고 stage 상태
$ git reset --soft HEAD^
//commit을 취소하고 unstaged 상태 -Default
$ git reset --mixed HEAD^ == git reset HEAD^
// 마지막 3개의 commit을 취소
$ git reset HEAD~3
//commit을 취소하고 unstaged 상태 및 워킹트리 디렉터리에서 삭제
$ git reset --hard HEAD^
--soft 사용
--soft를 사용하게 되면 HEAD가 두 번째 커밋으로 가리키며 스테이징 상태로 파일이 유지되는 것을 볼 수 있다.
--mixed사용
--mixed를 사용하면 HEAD가 첫 번째 커밋으로 이동하며 이전 커밋 내용은 삭제됩니다. 그러나 --soft와는 다르게 스테이징 상태가 되지 않고 언스테이징 상태로 변합니다. 이로 인해 soft에서 스테이징 된 파일인 third.txt도 언스테이징되므로 주의해야 합니다.
--hard 사용
--hard를 사용하면 HEAD가 이전 단계로 이동하고 커밋 내용도 삭제됩니다. 그러나 --soft와 --mixed와는 달리 언스테이징되는 것이 아니라 아예 워킹 트리에서 삭제됩니다. 이는 매우 주의해서 사용해야 합니다. 파일이 실제로 삭제되기 때문에 복구하기가 어려울 수 있으므로 사용 전에 신중하게 고려해야 합니다.
push 취소하기
다음과 같이 실수로 git에 푸쉬를 했다고 가정해 보자. 그러면 다음과 같이 실행하면 된다.
git reset HEAD^
가장 최근 커밋 취소
또는
git reset [커밋 아이디]
(사진상 커밋아디:e998120)
명령어를 실행하면 다음과 같이 HEAD가 워킹트리 main을 가리키게 된다. 하지만 아직 원격 저장소에는 취소되어있지 않은 걸 확인할 수 있습니다.
이제 다시 커밋을 해줍니다.
git committ -m "[커밋 메시지]"
다음과 같이 언스테이징 상태에서 커밋을 하게 됩니다.
이제 강제로 저장소에 psuh를 하면 된다.
하지만 강제로 push 하는 것은 주의해서 사용해야 합니다. 일반적으로 강제로 push하는 것은 로컬 저장소의 변경 내용을 원격 저장소에 강제로 적용하는 것을 의미합니다. 이는 원격 저장소에 다른 개발자가 작업한 내용을 덮어쓰는 결과를 초래할 수 있으므로 신중하게 사용해야 합니다. 특히 팀 프로젝트에서는 다른 개발자들과의 협업을 고려하여 강제로 push 하기 전에 다른 사람들의 작업 내용을 고려해야 합니다.
git push [저장소이름] [브랜치명] -f
사진처럼 이전의 커밋내용이 삭제되며 origin/main , origin/HEAD가 모두 두 번째 푸시를 가리키는 것을 볼 수 있습니다.
이로써 잘못한 푸쉬를 취소할 수 있습니다.
'Devops' 카테고리의 다른 글
[Git] Git bash CLI 명령어 모음 (0) | 2024.03.03 |
---|---|
[Jenkins] "String Parameter"와 "Secret File"을 활용하여 YAML 및 Properties 파일의 민감한 정보 보호하기 (0) | 2024.02.27 |
[Jenkins] 로컬 Docker(Docker HUB) +Jenkins(pipeline)+Git(Webhook)+MySQL CI/CD 자동 배포하기 (1) | 2024.02.27 |
[Jenkins] 젠킨스를 이용해 Git의 변경내용을 자동 빌드 (1) | 2024.02.24 |
[Jenkins] 젠킨스와 CI/CD란 무엇인가? (0) | 2024.02.24 |