현재 오즈코딩스쿨 강의를 통해 프론트엔드를 학습하고 있습니다.
본 포스트는 해당 강의에 대한 내용 정리를 목적으로 합니다.

git reset은 커밋이나 스테이징된 파일을 이전 상태로 되돌리는 명령어다.
Git에서 작업을 취소하거나, 특정 커밋 이전으로 돌아갈 때 사용한다.
#log 정보 확인 후 커밋 해시 확인 및 복사
git log
#복사한 커밋 해시를 이용해 reset 명령어와 원하는 옵션을 사용합니다.
git reset --hard [커밋 해시]
git reset --soft [커밋 해시]
git reset --mixed [커밋 해시]
#다시 한번 log를 활용해 정상적으로 reset이 되었는지 확인
git log
| 옵션 | 설명 |
|---|---|
--soft | HEAD만 이동 (변경 내용 유지, 스테이징도 유지) 이전 commit으로 되돌린후, 그 이후 이력들의 내용이 삭제되지 않고 stage에 올라가있어 언제든지 commit을 진행할 수 있는 상태가 됨 |
--mixed (기본값) | HEAD 이동 + 스테이징 취소 (파일은 그대로) 이전 commit으로 되돌린후, 그 이후 이력들의 내용이 삭제되지 않았지만 다시 commit하기 위해서는 다시 add 명령어를 이용해 stage에 올려 commit을 진행해야 함 |
--hard | HEAD 이동 + 스테이징 취소 + 파일 변경까지 삭제 이전 commit으로 되돌린 후, 그 이후 이력들을 모두 삭제 |
Reset은 언제 사용하나요?
- 혼자만 사용하는 브랜치인 경우
- origin에 있지만 아무도 이 브랜치를 사용하지 않는다는 확신을 가지는 경우
그 외 거의 모든 경우에서 commit을 되돌릴때 revert를 사용한다.
git reset [옵션] [커밋 해시]
옵션에 따라 동작 방식이 다르니 주의해야 한다.
git reset --soft HEAD~1
✅ 최근 커밋을 취소하고 변경 내용을 그대로 유지
✅ git commit -m "새로운 메시지"로 다시 커밋 가능
git reset --mixed HEAD~1
✅ 최근 커밋을 취소하고, 변경 내용을 작업 디렉터리로 이동
✅ git add . 후 다시 커밋 가능
git reset --hard HEAD~1
✅ 최근 커밋을 완전히 삭제하고, 변경 사항까지 날림
❗ 되돌리기 어려우므로 주의해야 함
git reset --hard <커밋 해시>
✅ 해당 커밋 시점으로 프로젝트를 완전히 되돌림
✅ git reflog로 기록을 보고 복구 가능
| 명령어 | 설명 |
|---|---|
git reset | 커밋을 삭제하고 이전 상태로 되돌림 |
git revert | 새로운 "되돌리는 커밋"을 생성 |
git reflog는 HEAD가 이동한 모든 기록을 확인하는 명령어다.
보통 git log는 커밋 히스토리만 보여주지만, git reflog는 체크아웃, 리셋, 병합 등 HEAD가 움직인 모든 기록을 남긴다.
git reflog
이렇게 실행하면 HEAD가 이동한 모든 기록이 출력된다.
커밋 해시(commit hash)
HEAD 이동 기록 (체크아웃, 리셋, 병합 등)
시간(timestamp)
작업 내용 요약
git reset --hard HEAD~1 # 마지막 커밋을 삭제함
👉 하지만 실수로 삭제했을 경우
git reflog
이렇게 확인하면 삭제된 커밋 해시가 보인다.
1a2b3c4 HEAD@{0}: reset: moving to HEAD~1
9d8e7f6 HEAD@{1}: commit: 중요한 기능 추가
✅ 여기서 삭제된 커밋 9d8e7f6을 다시 살릴 수 있다.
git reset --hard 9d8e7f6
git branch -D feature-branch
👉 브랜치가 날아갔을 경우
git reflog
출력된 커밋 해시를 확인한 뒤, 복구하면 된다.
git checkout -b feature-branch <해당 커밋 해시>
| 명령어 | 설명 |
|---|---|
git log | 커밋 히스토리만 확인 |
git reflog | HEAD 이동 기록까지 포함 (체크아웃, 리셋 등) |
즉, git reflog는 Git에서 내가 무슨 작업을 했는지 추적할 수 있는 중요한 도구다.
실수로 커밋을 날렸거나, 브랜치를 잃어버렸을 때 유용하니 꼭 기억해둬라. 🔥

git revert는 기존 커밋을 되돌리는 새로운 커밋을 생성하는 명령어다.
git reset과 달리 기록을 유지하면서 변경 사항을 되돌리기 때문에 협업할 때 안전하게 사용할 수 있다.
git revert <커밋 해시>
✅ 해당 커밋을 취소하는 새로운 커밋을 생성
✅ 기록이 남으므로 팀 프로젝트에서 안전하게 되돌릴 때 사용
git revert HEAD
✅ 최근 커밋을 되돌리는 새로운 커밋을 생성
git log --oneline # 되돌릴 커밋 해시 확인
git revert <커밋 해시>
✅ 이전 커밋들을 유지하면서 특정 커밋만 취소 가능
git revert -n HEAD~3..HEAD # 마지막 3개 커밋을 되돌림 (새 커밋 생성 안 함)
git commit -m "되돌리기 완료"
✅ 여러 개의 커밋을 하나의 되돌리기 커밋으로 묶어서 처리
| 명령어 | 설명 | 협업 시 추천? |
|---|---|---|
git reset | 커밋 자체를 삭제 (히스토리 사라짐) | ❌ |
git revert | 커밋을 되돌리는 새로운 커밋 생성 (기록 유지) | ✅ |
✅ git revert는 되돌리는 새로운 커밋을 만든다
✅ 기록을 유지하면서 안전하게 되돌릴 때 사용
✅ 협업할 때 유용하지만, 여러 개의 커밋을 되돌릴 땐 -n 옵션으로 묶어서 처리 가능
History 탭의 로그 화면에서 되돌리게 할 커밋을 선택하고 마우스 오른쪽 버튼을 클릭합니다. 팝업 항목중에서 “main를 이 커밋으로 초기화” 항목을 선택하면 reset에 적용할 옵션이 나옵니다. 원하는 옵션을 선택 후 확인을 누릅니다.


History 탭의 로그 화면에서 되돌리게 할 커밋을 선택하고 마우스 오른쪽 버튼을 클릭합니다. 팝업 항목중에서 커밋 되돌리기 항목을 선택하면 Revert 커밋과 메시지가 자동으로 생성됩니다.

git branch는 독립적인 작업을 할 수 있도록 새로운 가지(branch)를 만드는 기능이다.
각 브랜치는 서로 영향을 주지 않으면서 개발을 진행할 수 있기 때문에, 새로운 기능 개발, 버그 수정 등에 유용하게 사용된다.
쉽게 말하면 협업 중인 코드를 나만의 연습장에 그대로 복사해서 작업하는 것.
필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에
아래 그림과 같이 여러 작업을 동시에 진행할 수 있다.

또한, 이렇게 만들어진 branch는 다른 branch와 병합(Merge)함으로써, 작업할 내용을 다시 새로운 하나의 브랜치로 모을 수 있다.
아래 그림을 보면, branch를 사용하여 동시에 여러 작업을 진행하다가 Master or main branch에 병합(Merge)하는 과정을 볼 수 있다.

git branch
✅ 현재 저장소의 브랜치 목록을 출력하고, 현재 작업 중인 브랜치는 * 표시됨
git branch 브랜치이름
✅ 새로운 브랜치를 생성하지만, 현재 브랜치는 변경되지 않음
git checkout 브랜치이름
✅ 특정 브랜치로 이동
✅ 최신 Git에서는 git switch 사용 가능
git switch 브랜치이름
git switch -c 브랜치이름
✅ 새 브랜치를 만들고, 동시에 이동
git branch -d 브랜치이름
✅ 병합된 브랜치만 삭제 가능
git branch -D 브랜치이름
✅ 병합되지 않은 브랜치도 강제 삭제
git checkout 메인브랜치 # 보통 main 또는 develop
git merge 병합할브랜치
✅ 병합할 브랜치의 변경 사항을 현재 브랜치로 합침
Fast-forward 병합 (빠른 병합)
git merge feature-branch
git merge --ff [브랜치명]
git merge --no-f [브랜치명]
git merge --squash (대상 브랜치)
- 변경사항들 스테이지 되어 있음
- git commit 후 메시지 입력
Recursive 병합 (일반 병합)
두 브랜치가 각각 다른 커밋을 가지고 있는 경우
새로운 "병합 커밋"이 생성됨
git merge feature-branch
✅ 두 브랜치의 변경 사항을 하나의 커밋으로 합침
git status
git add 충돌해결한파일
git commit -m "병합 충돌 해결"
✅ 충돌이 해결되면 병합 완료
git fetch
git checkout -b 브랜치이름 origin/브랜치이름
✅ 원격 저장소의 브랜치를 로컬에서 생성하고 체크아웃
| 브랜치 관련 명령어 | 설명 |
|---|---|
git branch | 브랜치 목록 확인 |
git branch 브랜치이름 | 새 브랜치 생성 |
git checkout 브랜치이름 | 브랜치 이동 |
git checkout -b 브랜치이름 | 새 브랜치 생성 + 이동 |
git branch -d 브랜치이름 | 브랜치 삭제 |
git merge 브랜치이름 | 브랜치 병합 |
git fetch | 원격 브랜치 목록 가져오기 |
📌 브랜치를 잘 활용하면 코드 충돌을 최소화하면서 여러 작업을 동시에 진행할 수 있다.
HEAD란?
터미널에 git log를 입력했을때 여러분들은 HEAD라는 단어를 본적 있다.
HEAD란 해당 branch의 마지막 commit을 뜻합니다.
즉, HEAD가 특정 commit에 위치해 있다면 그 branch의 가장 마지막 commit이라고 해석할 수 있습니다.


git rebase는 브랜치의 변경 사항을 다른 브랜치의 최신 커밋 뒤로 재배치하는 명령어다. 즉, 브랜치 히스토리를 깔끔하게 정리하는 역할을 한다.
git checkout feature-branch # 내 브랜치로 이동
git rebase main # main 브랜치의 최신 커밋 뒤로 재배치
✅ feature-branch의 커밋을 main의 최신 커밋 뒤로 옮김
✅ 커밋 히스토리가 일직선으로 정리됨
새로운 병합(merge) 커밋이 생성됨
브랜치 구조를 유지하면서 변경 사항을 합침
히스토리에 병합 커밋이 남아 복잡해질 수 있음
git checkout main
git merge feature-branch
📌 협업 시 안전하지만, 히스토리가 복잡해질 수 있음
브랜치 히스토리를 깔끔하게 정리
병합 커밋 없이 커밋을 재배치
강제 푸시(git push -f)가 필요할 수 있어 협업 시 주의해야 함
git checkout feature-branch
git rebase main
📌 개인 작업 시 유용하지만, 협업 시 주의해야 함
git checkout feature-branch
git rebase main
✅ feature-branch의 커밋을 main의 최신 커밋 뒤로 이동
git status # 충돌 난 파일 확인
nano 수정된파일 # 파일 수정
git add 수정된파일
git rebase --continue
✅ 충돌을 해결하고 rebase 계속 진행
git rebase --abort
✅ rebase를 취소하고 원래 브랜치 상태로 복구
공유된 브랜치에서 rebase를 하면 안 됨!
협업할 때는 git merge, 개인 작업할 때는 git rebase 사용이 좋음
git checkout main # 적용할 브랜치로 이동
git cherry-pick <커밋 해시>
✅ feature-branch에서 특정 커밋만 main 브랜치로 가져옴
git checkout main
git cherry-pick abc1234
✅ feature-branch의 abc1234 커밋만 main 브랜치에 적용
git cherry-pick abc1234 def5678
✅ 여러 개의 커밋을 선택해서 현재 브랜치에 적용
git cherry-pick abc1234..def5678
✅ abc1234부터 def5678까지의 커밋을 모두 적용
같은 파일을 수정하면 충돌 발생
충돌 파일을 수정한 후
git add 수정된파일
git cherry-pick --continue
✅ 충돌 해결 후 cherry-pick 계속 진행
git cherry-pick --abort
✅ cherry-pick을 취소하고 원래 상태로 복구
conflict(충돌)는 Git이 자동으로 병합할 수 없는 상황을 의미한다.
보통 두 개의 브랜치에서 같은 파일의 같은 부분을 수정했을 때 발생한다.
git merge 중 충돌
git rebase 중 충돌
git cherry-pick 중 충돌
git stash pop 중 충돌
git status
✅ 충돌이 발생한 파일을 확인
nano 충돌난파일 # 또는 VSCode, Vim 등 사용
✅ Git은 충돌이 난 부분을 아래처럼 표시함
<<<<<<< HEAD
내 브랜치에서 수정한 내용
=======
다른 브랜치에서 수정한 내용
>>>>>>> feature-branch
✅ HEAD 부분: 현재 브랜치의 변경 내용
✅ feature-branch 부분: 병합하려는 브랜치의 변경 내용
✅ 올바른 내용으로 수정한 후 저장
git add 충돌난파일
✅ 모든 충돌 파일을 해결한 후 다음 명령 실행
git merge --continue # merge 중이라면
git rebase --continue # rebase 중이라면
git cherry-pick --continue # cherry-pick 중이라면
git commit -m "충돌 해결"
✅ 병합 완료
충돌이 발생한 부분을 신중하게 수정해야 함
VSCode, GitKraken 같은 GUI 툴을 사용하면 편리함
협업 중이라면 다른 개발자와 논의 후 해결
어렵다...어려워...복습이 답이다!!