git clean은 추적하지 않은 파일들을 삭제하는 기능입니다.
| 옵션 | 설명 |
|---|---|
-n | 삭제될 파일 목록을 미리 보기 |
-i | 인터랙티브 모드로 삭제 진행 |
-d | 폴더도 포함하여 삭제 |
-f | 강제로 즉시 삭제 (force) |
-x | .gitignore에 등록된 파일들도 삭제 ⚠️ |
보통은 폴더가 같이 나오지 않기 때문에
git clean -dn 으로 같이 나오게 합니다. 그리고 좀더 자세하게 살펴보기 위해서 git clean -dni하면 모든 폴더와 파일들에 대해서 추적되지 않는 것들을 살펴볼 수 있습니다.
그런데 뭐 별것들이 아닌 확률이 높기 때문에,
보통은 git clean -df해서 추적하지 않는 것은 다 지웁니다.
git restore은 원래 git checkout에서 나온 것입니다. git checkout이 너무 많은 기능을 가지고 있어서 이를 switch랑 restore로 나온 분리된 것이라고 생각하면 편합니다.
| 기능 | git checkout (기존) | git switch (새로운) | git restore (새로운) |
|---|---|---|---|
| 브랜치 변경 | ✅ 가능 (git checkout branch) | ✅ 가능 (git switch branch) | ❌ 불가능 |
| 새 브랜치 생성 후 이동 | ✅ 가능 (git checkout -b branch) | ✅ 가능 (git switch -c branch) | ❌ 불가능 |
| 파일 변경 취소 | ✅ 가능 (git checkout -- file) | ❌ 불가능 | ✅ 가능 (git restore file) |
| 사용 목적 | 브랜치 변경 + 파일 변경 취소 (혼합됨) | 브랜치 변경 전용 | 파일 변경 취소 전용 |
| Git 2.23 이후 권장 여부 | 🚨 비추천 (혼란스러움) | ✅ 추천 | ✅ 추천 |
git restore은 매우 유용한 기능입니다.
staging 되지 않은 경우)git restore (파일명)
변경된 파일을 워킹 디렉토리에서 원래 상태로 되돌림.
.을 사용하면 모든 변경 사항을 복구할 수 있음.
git restore .
현재 상태 확인
git status
git status를 통해 어떤 파일이 add 되었는지 확인.
Staging 된 파일을 되돌리기
git restore --staged (파일명)
git add로 Staging 된 파일을 다시 Unstage 상태로 돌립니다.
Staging에서 제거되지만, 파일 변경 내용 자체는 유지됩니다.
git restore --source=(헤드 또는 커밋 해시) (파일명)
예제:
git restore --source=c308101a997b3de44ce9b661676339475a176caa tigers.yaml
특정 커밋의 상태로 파일을 복구하고 싶을 때 사용.
| 명령어 | 기능 |
|---|---|
git restore (파일명) | 변경된 파일을 워킹 디렉토리에서 복구 |
git restore --staged (파일명) | Staging 영역에서 Unstage (변경 내용 유지) |
git restore --source=(커밋 해시) (파일명) | 특정 커밋의 상태로 파일 복구 |
git reset --hard 했을 때 복구하는 방법git reset --hard HEAD^^^^
HEAD^^^^는 현재 커밋에서 4단계 이전 커밋으로 이동하는 명령어.
그런데 아차! 실수했다! 원래 상태로 되돌리고 싶다.
git reflog
과거의 Git 명령 실행 내역을 보여줌 (브랜치 이동, 커밋, reset 등).
예제 출력:
628f72f HEAD@{0}: reset: moving to HEAD^^^^
c9b1d3e HEAD@{1}: commit: 새로운 기능 추가
...
여기서 맨 앞의 해시값(628f72f)을 기억.
git reset --hard 628f72f
실수하기 전 상태로 다시 복구.
| 명령어 | 기능 |
|---|---|
git reflog | Git에서 실행한 과거 명령 내역 확인 |
git reset --hard (해시값) | 특정 시점의 커밋으로 되돌리기 |