공부방

되돌아 갈 때(revert, reset, restore) 본문

되돌아 갈 때(revert, reset, restore)

코딩 화이팅 2024. 8. 4. 16:18

git restore

파일 하나를 되돌릴 때

git restore 파일명
  • 최근 commit 된 상태로 현재 파일의 수정내역을 되돌릴 수 있음
git restore --source 커밋아이디 파일명
  • 입력한 파일이 특정 커밋아이디 시점으로 복구
git restore --staged 파일명
  • 복구랑은 상관없지만 특정 파일은 staging 취소 가능

git revert

commit을 되돌릴 때

  • 3개의 커밋 중 b 파일이 문제가 많아서 commit을 취소하고 싶은 상태
  • 왼쪽에 있는 노란 문자들은 commit의 고유 id
git revert 커밋아이디
  • 그 커밋아이디에서 일어난 일만 취소
  • 실행해서 에디터가 뜨면 맘대로 커밋메세지 수정하고 닫으면 됨

  • 이렇게 Vim 에디터가 뜬다면 커밋 메세지 수정하라는건데 i 눌러서 글자 수정하고 싶으면 하고 esc 눌러서 나올 수 있음
  • :wq 누르면 커밋 메세지가 저장됨

  • 에디터 닫고 나면 새로운 커밋이 생성되고 b파일만 삭제되어 있다.
  • 그 커밋 id 이후에 했던 파일이나 커밋들은 영향없이 유지된다.
  • 로그를 보면 revert 해줬다는 commit이 자동으로 생성되고 작업 폴더에서 a,c파일은 있지만 b파일은 삭제되어 있다. 
  • 이렇게 revert 명령어 쓰면 특정 커밋에서 있던 일을 지워버릴 수 있다.

  • revert할 때 동시에 여러개의 commit id 입력 가능
  • 최근 했던 commit 1개만 revert 하고 싶으면 git revert HEAD 하면 됨
  • merge 명령으로 인해 새로 만들어진 commit도 revert 가능하다.->merge 취소됨

git reset

그냥 전부 시간을 되돌리고 싶다면

git reset --hard 커밋아이디
  • 그 커밋이 생성될 때로 시간을 되돌려줌
  • 작업 폴더 내의 파일도 그 시절로 돌아감

  • 여러명이서 협업하는 리포지토리에서는 보통 reset 쓰면 안됨.
  • untracked 파일들은 (git add 안 해놓은 파일들) 사라지지 않고 유지됨
  • git clean 명령어 쓰면 untracked 파일들도 다 지울 수 있음

git reset --hard d874b2b
  • a,b 파일은 남아있고 c 파일이 삭제된다.
git reset --soft d874b2b
  • a,c 파일은 남아있고 b 파일은 staging area에 남아있다.
  • commit 하거나 그럴 수 있음
git reset --mixed d874b2b
  • a,c 파일은 남아있고 b 파일은 staging 되지 않은 상태가 된다.
  • git add 하거나 commit 하거나 그럴 수 있다.
  • git reset 뒤에 아무것도 없다면 자동으로 --mixed 옵션이 된다.

'' 카테고리의 다른 글

소스트리  (0) 2025.03.19
다양한 git merge 방법(3-way, fast-forward, squash, rebase)  (0) 2024.07.28
branch  (0) 2024.06.02
vscode에서 깃 쉽게 하기  (0) 2024.05.30
파일 기록  (0) 2024.05.25