hayu's 개발 일지

[TIL]240427 git commit 되돌리기 본문

기술/git, github

[TIL]240427 git commit 되돌리기

hayu00 2024. 4. 27. 21:31

git commit 되돌리기

 

깃 로그를 확인한다.(인텔리제이에서는 로그를 볼수 있다.)

git log

 

git revert , git reset

  • revert와 reset는 커밋을 되돌리기 위해 사용하는 명령어다.
  • reset은 커밋 history 자체를 뒤로 돌리고, revert는 커밋 history는 그대로 유지한 상태로 로컬 파일만 이전 커밋 상태로 되돌린다.
git reset
# 커밋 history를 이전으로 되돌린다.

git revert
# 커밋 history를 유지한 체 로컬 파일만 이전 상태로 되돌린다.

reset

  • 로컬에만 커밋이 머물러 있거나 원격 저장소에 push룰 했어도 나만 사용하는게 확실하다면 reset을 써도 상관 없다.
  • 하지만 다른 사람들과 공유하고 있는 브랜치라면 서로의 커밋 history가 달라지기 때문에 서로를 위해서도 하지 않는 것이 좋다.

reset 옵션

-hard

  • 되돌린 커밋 이후의 모든 커밋 history를 삭제한다.
git reset --hard HEAD^
# 바로 이전 커밋으로 되돌린다.

git reset --hard HEAD~3
# 3 커밋 전으로 되돌린다.

git reset --hard 커밋아이디
# 특정 커밋으로 되돌린다.

-soft

  • 커밋 history는 삭제되지만 변경 사항은 stage에 올라간 상태로 남는다.(커밋은 안된상태)
git reset --soft HEAD^
# 바로 이전 커밋으로 되돌린다.

git reset --soft HEAD~3
# 3 커밋 전으로 되돌린다.

git reset --soft 커밋아이디
# 특정 커밋으로 되돌린다.

-mixed

  • 커밋 history는 삭제 되지만 변경사항은 stage에 올라가지 않은 상태로 남는다. add랑 commit을 하기 전 상태이다.
git reset --mixed HEAD^
# 바로 이전 커밋으로 되돌린다.

git reset --mixed HEAD~3
# 3 커밋 전으로 되돌린다.

git reset --mixed 커밋아이디
# 특정 커밋으로 되돌린다.

# 되돌린 이후 정상적으로 작동하면 변경 사항을 삭제하면 되고,
# 모종의 이유로 다시 원복하고 싶으면 아래 코드로 다시 커밋하면 된다.

git add .
# 모든 변경 사항을 stage에 올린다.

git commit -m "커밋 제목"
# stage에 올린 변경 사항 커밋

git push
# 원격 저장소에 push

원격 저장소에 올라간 커밋을 reset하면

  • 원격 저장소에 올라간 커밋을 되돌리면 원격 저장소와 로컬 저장소의 커밋 history가 다르기 때문에 push할 때 오류가 나낟. 이때는 -force 옵션을 줘서 강제로 원격 저장소의 커밋 history를 로컬 저장소의 커밋 history로 덮어 씌워야 한다.
  • 다른 사람들과 공유하고 있는 원격 저장소라면 공유중인 다른 사람들에게도 오류가 발생하기 때문에 왠만하면 사용하지 않는 게 좋다.
  • 부득이하게 사용한 경우라면 팀원들에게 상황을 공유하고 모두의 커밋 history를 강제로 맞추는 작업을 해야한다.
git push 원격저장소 커밋 --force
# 강제로 원격 저장소에 push 한다.

git push origin HEAD --force
# 강제로 마지막 커밋을 원격 저장소(origin)에 push 한다.

revert

  • revert는 커밋을 삭제하는게 아니라 이전의 변경사항을 불러와서 새로운 커밋을 추가한다. reset이 과거로 가는거라면 revert는 과거를 불러오는 느낌이다.
  • reset 처럼 history가 꼬일 일이 거의 없어서 안전하다.
  • revert를 사용하게 되면 git log에 Revert "커밋메시지"가 추가된다.
git revert HEAD
# 바로 이전 커밋으로 되돌린다.

git revert 커밋아이디
# 특정 커밋아이디로 되돌린다.

git revert -m 1 HEAD
# 마지막 커밋이 merge라면, 마지막 커밋으로 되돌린다.

git revert --no-commit 커밋아이디
# 특정 커밋아이디를 stage에는 올라가지만 commit하지는 않은 상태로 되돌린다.

revert는 커밋 history가 삭제되지 않고 어떤 커밋이 revert 되었는지 기록이 남기 때문에 history 관리도 유용하다.

깃 롤백을 할 때는 revert가 좋다.