revert, reset, restore

sunghun kim·2024년 8월 26일

[git]

목록 보기
6/10

출처: git기초 (코딩애플)


서론

git restore: 파일하나 복구
git revert: commit 복구
git reset: 시간 되돌리기

자주쓰는 명령어는 아니지만
필요할 때 찾아 볼 수 있도록 적어둡시다.


깔끔한 상태에서 시작하기 위해 새로운 작업폴더를 만들어서 다시 시작해봅니다.

a파일 만들고 commit
b파일 만들고 commit
c파일 만들고 commit 해봅니다.


git restore

c파일이 잘 작동이 되지않아서 파일을 복구하고 싶습니다.
그럼 git restore c 를 입력해서 파일하나를 복구할 수 있습니다.

git restore 파일명
최근 commit 된 상태로 현재파일의 수정내역을 되돌릴 수 있습니다.

git restore --source 커밋아이디 파일명
입력한 파일이 특정 커밋아이디 시점으로 복구됩니다.

git restore --staged 파일명
이 코드는 복구랑은 상관없는 코드지만
특정 파일을 staging 취소할 수 있습니다.


git revert

b파일이 문제가 많아서
b파일을 만든 [cc96a1c] commit을 취소하고 싶어졌다고 합시다.

commit 하나를 취소하고 싶으면 git revert를 사용하면됩니다.
이 코드는 사실 없애버리는 것이 아닌
commit 하나를 취소한 commit 을 하나 생성해줍니다.

git revert 커밋아이디를 입력합니다.
이때 Vim 에디터가 뜨는 경우가 있습니다.
커밋 메세지를 수정하라는 건데 i 눌러서 글자를 수정하고 싶으면 하고
esc 눌러서 나올 수 있습니다.
그리고 :wq 를 입력하면 커밋 메시지가 저장됩니다.

git revert 커밋아이디를 입력하고 나면
새로운 커밋이 생성되고 b 파일이 삭제되어있습니다.
(그 커밋ID 이후에 했던 파일이나 커밋들은 영향없이 유지가 됩니다.)

참고로 git revert 커밋아이디1 커밋아이디2 처럼 여러개의 commit ID 입력 가능합니다.
최근 했던 commit 1개만 revert 하고 싶으면 git revert HEAD 하면 편리합니다.
merge 명령으로 인해 새로 만들어진 commit 도 revert 가능합니다.
그러면 merge가 취소가 됩니다.


git reset

git reset --hard 커밋아이디 를 입력하면
그 커밋이 생성될 때 이후의 기억을 잃어버립니다.

hard / soft / mixed 설정을 넣을 수 있습니다.
git reset --hard cc96a1c
a, b 파일은 남아있고 c 파일이 삭제됩니다.
git reset --soft cc96a1c
a, c 파일은 남아있고 b 파일은 staging area에 남아있습니다.
이제 commit 할 수 있습니다.
git reset --mixed cc96a1c
a, c 파일은 남아있고 b 파일은 staging 되지 않은 상태가 됩니다.
이제 git add 하고 commit 할 수 있습니다.


참고

협업시에는 보통 reset 을 쓰지 않습니다.
untracked 파일들은 (git add 안해놓은 파일들) 사라지지 않고 유지됩니다.
git clean 명령어 찾아서 사용해보면 untracked 파일들도 다 지울 수 있습니다.

profile
기죽지않기

0개의 댓글