Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[Git:명령어 정리] 작업 되돌리는 명령어 정리: restore, reset, revert 본문

Git/Git: 명령어 정리

[Git:명령어 정리] 작업 되돌리는 명령어 정리: restore, reset, revert

데브마우스 2024. 1. 10. 09:08

git restore: 작업 트리에서 수정한 파일을 되돌립니다

기존에는 checkout 명령어를 사용하였습니다. 하지만 Git 2.23 이후 버전 부터 restore 명령어를 사용합니다.

git add 명령어로 파일을 추가 하기전에 수정한 파일을 되돌립니다.

 

git restore 명령어의 형식은 다음과 같습니다.

git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>…​
git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>…​]

git restore --staged: 스테이징을 되돌립니다.

기존에는 reset 명령어로 스테이징을 취소하였습니다. 하지만 Git 2.23 이후 버전부터 restore 명령어를 사용합니다.

git add 명령어로 파일을 스테이지에 올린 후에 사용합니다. git restore --staged를 사용하면 파일이 스테이지에 올라가기 전으로 변경된걸 확인하실 수 있습니다.

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test3.txt

no changes added to commit (use "git add" and/or "git commit -a")

git reset HEAD^: 최신 커밋으로 되돌립니다.

git reset 명령어의 형식은 다음과 같습니다.

git reset [-q] [<tree-ish>] [--] <pathspec>…​
git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>…​]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
DEPRECATED: git reset [-q] [--stdin [-z]] [<tree-ish>]

 

HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 의미합니다.

test3.txt 파일의 커밋이 취소되고 스테이지에서도 내려왔다는걸 확인하실 수 있습니다.

Unstaged changes after reset:
M       test3.txt

git reset 명령의 옵션
Git reset 명령어 설명
git reset --soft HEAD^ 커밋을 취소한 후 파일을 staged 상태로 작업 디렉터리에 보관합니다.
git reset --mixed HEAD^ 커밋을 취소한 후 파일을 unstaged 상태로 작업 디렉터리에 보관합니다.
git reset HEAD^ --mixed 옵션처럼 커밋을 취소한 후 unstaed 상태로 작업 디렉터리에 보관합니다.

git reset [commit 해시]: 특정 커밋으로 되돌립니다.

git reset [Commit 해시]를 사용해 되돌릴 때 주의해야할 점이 있습니다. reset [Commit 해시]를 입력할 경우 [Commit 해시]를 리셋하는 것이 아니라 최근 커밋을 [Commit 해시]으로 리셋합니다.

-------------------------------------------------------------------------------

$ git log
commit f6ef1c5698253bb04641d7cc6d9ac1df79ba9825
Author: user.name <user.email>
Date:   Wed Jan 10 18:21:43 2024 +0900

    test3

commit 457ed1f7092b98e4ce74c4c5e2a1ba8a4136eca4
Author: user.name  <user.email>
Date:   Wed Jan 10 18:16:14 2024 +0900

    test2

commit 60fa2f17fbce82a48457f8ff2f880e86a876acef
Author: user.name <user.email>
Date:   Wed Jan 10 17:33:04 2024 +0900

    test1

-------------------------------------------------------------------------------

$ git reset 60fa2f17fbce82a48457f8ff2f880e86a876acef
Unstaged changes after reset:
M       test.txt

-------------------------------------------------------------------------------

$ git log
commit 60fa2f17fbce82a48457f8ff2f880e86a876acef (HEAD -> main)
Author: user.name  <user.email>
Date:   Wed Jan 10 17:33:04 2024 +0900

    test1

git revert [Commit 해시]: 커밋 변경 이력을 취소합니다.

git reset [Commit 해시]과는 다르게 git revert [Commit 해시]는 변경 사항만 취소하고 커밋은 남겨두는 명령어입니다.