Snapshotting(checkout, restore, reset), Patching(revert)
git 명령어를 통해 변경사항의 스냅샷 설정을 하거나 패치 적용을 할 수 있습니다.
(취소, 폐기, 복구 등)
1. git checkout
git checkout <tree-ish> [<pathspec>...]
git checkout HEAD 명령어를 사용하여,
git checkout HEAD
브랜치의 HEAD로 체크아웃합니다.
모든 변경사항을 버립니다.
git checkout -- <pathspec>...
git checkout -- <파일> 또는 git checkout HEAD <파일> 명령어를 사용하여,
특정 파일의 변경 사항을 최근 커밋 시점으로 되돌립니다.
git checkout -- <pathspec>...
git checkout HEAD <pathspec>...
2. git restore <pathspec...>
복원
git restore <파일> 명령어를 통해 특정 파일의 변경사항을,
헤드가 있는 시점으로 복원할 수 있습니다.
(가장 최근 커밋된 시점)
git restore <pathspec...>
git restore --source
git restore --source HEAD~n <파일> 명령어를 통해 특정 파일의 변경사항을,
HEAD 기준 특정 시점으로 되돌릴 수 있습니다.
git restore --source HEAD~n <pathspec...>
git restore --source <commit hash> <pathspec...>
git restore --source HEAD~2 <파일> 명령어를 사용하여,
특정 파일을 HEAD 기준 커밋 2개 이전 시점으로 되돌릴 수 있고,
(혹은 HEAD~n 대신 commit hash를 사용하여 특정 commit 시점으로)
git restore <파일> 명령어를 다시 사용하여 가장 최근 커밋된 시점으로 돌아올 수 있습니다.
git restore --staged
git restore --staged <파일> 명령어를 사용하여 스테이지된 파일을 언스테이지할 수 있습니다.
git add 한 파일의 추적을 되돌리는 것으로, 파일의 삭제나 수정이 아닙니다.
git restore --staged <pathspec..>
3. git reset <commit-hash>
재설정
--soft, --mixed, --hard 크게 세 가지 옵션이 존재합니다.
--soft 옵션은 커밋을 숨깁니다.
--mixed 옵션은 기본 옵션이며 커밋을 삭제하지만 변경사항은 working directory에 남깁니다.
--hard 옵션은 커밋과 변경사항 모두 삭제합니다.
git reset <commit hash> 명령어를 사용하여 git repository를 특정 커밋으로 재설정 할 수 있습니다.
(변경사항은 working directory에 남아있지만, commit이 제거됩니다)
git reset <commit hash>
변경사항이 남아있기 때문에 잘못된 브랜치에서 커밋한 상황에서 유용합니다.
(git reset - git switch - git add)
만약 변경사항 또한 working directory에 남지 않도록 하려면 --hard 옵션을 추가합니다.
git reset --hard <commit hash>
4. git revert
되돌리기
git revert 명령어를 사용하여 변경사항을 되돌릴 수 있습니다.
git reset 명령어가 커밋을 삭제하여 없었던 것처럼 만든다면,
git revert는 변경사항을 특정 시점으로 되돌린다는 commit을 남깁니다.
revert로 커밋을 되돌리고 되돌린 내역을 커밋하는 것은,
커밋을 제거하는 것보다 협업에 유리합니다.
제거한 커밋 내역을 다른 사람이 가지고 있을 수 있으며,
이로 인해 병합 문제가 발생할 수 있기 때문입니다.
따라서 협업을 우선시한다면 commit 실수 시에 revert를 권장합니다.
'SCM > Git' 카테고리의 다른 글
[Git & GitHub 9] git push, origin, switch (0) | 2024.05.16 |
---|---|
[Git & GitHub 9] GitHub란? git clone, git remote (0) | 2024.05.14 |
[Git & GitHub 7] detached HEAD (0) | 2024.05.10 |
[Git & GitHub 6] git stash (0) | 2024.05.10 |
[Git & GitHub 5] git diff (0) | 2024.05.09 |