Step 1. Git 실습용 디렉터리 생성
다음 명령어를 터미널에 입력하여 실습 디렉터리를 생성한다.
mkdir git-practice && cd git-practice
그리고 다음 명령어를 입력하여 해당 폴더를 Git 저장소로 만든다.
git init

git init은 폴더 안에 숨겨진 .git 디렉터리를 만든다.
그 안에 모든 기록이 저장되며 이 폴더를 지우면 기록도 전부 사라진다.
vscode에서 .git 폴더를 보고 싶다면 설정 창(Cmd + ,)에서 exclude 항목에서 .git을 제거한다.

Step 2. 실습 파일 생성
다음 명령어를 입력하여 실습 파일을 생성한다.
echo "login code" > login.js && echo "auth code" > auth.js && echo "Hello" > README.md

다음 명령어를 입력하여 현재 Git의 상태를 확인해보자.
git status

이전에 생성한 파일 3개가 스테이징 영역에 올라가지 않아 추적되지 않는 파일로 존재한다는 것을 확인할 수 있다.
Step 3. 파일을 스테이징 영역에 올려서 커밋해보기
이번에는 다음 add 명령어를 사용하여 로그인 관련 2개의 파일을 스테이징 영역(장바구니)에 올려보자.
git add login.js auth.js

다시 다음 명령어를 입력하여 Git의 상태를 확인해 보자.
git status

로그인 관련 2개의 파일은 스테이징 영역에 올라가서 커밋 대상이 된 것을 볼 수 있고
md 파일은 작업 폴더에서 추적되지 않는 파일로 남아있는 것을 볼 수 있다.
이제 다음 commit 명령어를 입력하여 스테이징 영역에 있는 로그인 관련 파일을 커밋해 보자.
git commit -m "feat: 로그인 기능 추가"


이번에는 README.md 파일을 스테이징 영역에 올린 다음 커밋해 보자..

git commit -m "docs: README 오타 수정"

실습 폴더 내의 모든 파일이 커밋된 것을 볼 수 있다.
이제 다음 명령어를 통해 커밋 기록을 한 줄씩 확인해 보자.
git log --oneline

+ 다음 vscode 확장 프로그램을 설치하면 Git log를 좀 더 직관적으로 확인할 수 있다.



Step 4. 이미 커밋된 파일을 수정해 보기
다음 명령어를 입력하여 이미 커밋된 파일을 수정해 보자.
echo "login code v2" > login.js

Git Graph를 확인해 보면

변경 사항에 대하여 커밋되지 않았단 것을 확인할 수 있다.
그리고 새로운 파일을 생성한 다음 스테이징 영역에 올려보자.
echo "temp" > memo.txt
git add memo.txt
그리고 다음 명령어를 통해 git의 상태를 확인해 보자.
git status

괄호 안의 설명을 확인해 보면
새로 추가된 파일인 memo.txt 파일에 대해선
git restore --staged <file> 명령을 통해
스테이징 영역에 있는 memo.txt 파일을 다시 작업 폴더 영역으로 내릴 수 있다는 것을 알 수 있고
수정된 파일인 login.js에 대해선
현재 수정된 파일은 작업 폴더에 새로운 파일로서 존재하는 것이며
add 명령어를 이용하여 스테이징 영역에 올리거나
restore 명령어를 이용하여 아예 수정 사항 자체를 제거하여 수정되기 이전 상태로 되돌릴 수 있다는 것을 알 수 있다.
Step 5. 되돌리기

git restore
git restore --staged <파일> # 스테이징 → 작업 폴더 (add 취소)
git restore <파일> # 작업 폴더의 수정 자체를 버림(위험!)
--staged (O): 안전. 장바구니에서 물건을 뺀 것뿐이고, 파일 내용은 그대로이다.
--staged (X): 위험. 마지막 커밋 상태로 파일을 되돌리므로, 커밋하지 않은 수정 내용은 Git 어디에도 기록이 없어 복구 불가능하다.
애초에 커밋된 적이 없는 작업 폴더에 있는 Untracked file을 지우기 위해선 다음 명령을 통해 지울 수 있다.
git clean -f <파일>
또 스테이징 영역에 있는 파일을 한 번에 파기하고 싶다면 다음 명령을 통해 파기할 수 있다.
git restore --staged --worktree <파일>
git reset - 커밋을 취소하고 기록에서 지움
git reset --soft HEAD~1 # 커밋만 취소, 커밋 했던 파일은 스테이징 영역에 남음 (안전)
git reset HEAD~1 # 커밋 취소, 커밋 했던 파일은 작업 폴더에 남음 (기본값)
git reset --hard HEAD~1 # 커밋과 커밋 했던 파일 전부 삭제 (위험!)
HEAD는 지금 내가 보고 있는 커밋을 가리키는 포인터로
HEAD~1은 "현재 HEAD가 가리키는 위치에서 한 칸 뒤 커밋"이라는 뜻이다.
핵심은 reset은 커밋 기록 자체를 없던 일로 만든다는 점이다.
히스토리가 깔끔해지지만, 이미 다른 사람과 공유한 커밋에 쓰면 상대방의 기록과 충돌하게 된다.
git revert
gir revert <커밋 해시값>
revert는 되돌릴 대상인 커밋의 기록을 지우지 않고 대신에 그 커밋의 정확히 반대의 작업을 수행하는
(예를 들어, 줄을 추가했다면 해당 줄을 삭제하고 기존의 어떤 줄을 삭제했다면 다시 복구하는) 새 커밋을 앞에 추가한다.
히스토리에 "이걸 되돌렸다"는 사실까지 남는 셈이다.
따라서 취소 이력을 기록하기 때문에, 이미 원격 저장소(Github)에 Push하여 팀원들과 공유된 커밋을 안전하게 되돌릴 때 사용한다.
Reset과 Revert의 차이는
reset은 아직 파일이 내 로컬 저장소에만 있기 때문에 기록을 삭제하여 아무도 모르는 일로 만들 수 있고
revert는 이미 Github에 올라갔기 때문에 기록을 삭제하지 않고 취소 이력을 남기는 것이다.
Step 6. 실습
실습용 파일 생성을 생성한다.
echo "실수한 코드" > mistake.js
생성한 파일을 스테이징 영역에 올린다.
git add mistake.js
Git 상태 확인
git status

다시 생성한 파일을 스테이징 영역에서 작업 폴더로 내린 다음 Git 상태를 확인해 보자.
git restore --staged mistake.js

이번에는 일부러 잘못된 커밋을 생성해 보자.
git add mistake.js
git commit -m "실수한 커밋"
이제 Git 로그를 확인해 보자.
git log --oneline

이번에는 reset 명령어로 커밋을 취소해 보자.
git reset --soft HEAD~1
커밋 기록을 확인해 보면
git log --oneline

커밋한 기록이 삭제가 된 것을 볼 수 있고
파일을 확인해 보면
git status


커밋되었던 파일이 스테이징 영역으로 내려간 것을 확인할 수 있다.
'개발 > Git' 카테고리의 다른 글
| [Git] GitHub 협업 실습 [Pull Request] (0) | 2026.08.23 |
|---|---|
| [Git] GitHub(원격 저장소) 연결하기 (0) | 2026.08.19 |
| [Git] Branch Merge 충돌 실습 (0) | 2026.08.17 |
| [Git] Branch (0) | 2026.08.17 |
| [Git] MacOS 환경에서 Git 입문하기 (0) | 2026.08.13 |