Search
Duplicate

git add 실수했을때.. 작업 되돌리기

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
git
Github
태그
Scrap
8 more properties
처음 깃을 공부할 때는 가장 간단한 git add, git commit, git push 라는 명령어만 배웠다.
실수로 명령어들을 칠 때도 있었지만 git add 전으로 돌아가거나 git commit 전으로 돌아가는 방법은 몰라서 그냥 쓰고 있었다...
깔끔한 깃 커밋&푸시 이력을 위해서는 되돌아가는 방법도 알아야 한다! 그래서 정리해본 git 작업 되돌리기

git 작업 되돌리기

파일 하나만 수정 전(마지막 푸시 or 클론상태)으로 돌리기

git checkout -- file.c
C

파일들 수정해버렸다면 마지막 푸시 상태로 되돌리기

방법1(저장 없이 마지막 상태로 되돌리기)
git checkout .
C
방법2(지금 수정내용 저장해 둘 필요 있다면)
git stash //로 지금 작업한 내용 다른데다가 잠시 저장 git stash drop //으로 저장해둔거 지우기
C

스테이징 되돌리기(git add 취소하기)

git reset HEAD file.c
C

커밋(&스테이징) 전으로 되돌리기(git commit 취소하기)

최신 커밋만 취소
git reset HEAD^
C
최신 n개의 커밋 취소
git reset HEAD~n
C

이미 github(원격저장소)에 올린 파일 제거하기

로컬, 원격저장소 모두에서 파일 삭제
git rm file.c
C
로컬에는 파일이 남아있지만 원격저장소에서 삭제
rm --cached를 이용해서 working tree files(로컬의 파일)들은 남겨두고 staging area에 있는 캐시를 삭제한다. (→ 이 상태에서 푸시하면 원격저장소에서 삭제됨)
-r 옵션은 폴더명으로 삭제할 때 이용
git rm --cached file.c
C
git rm -r --cached folder
C

예시: .gitignore에 넣어야 할 파일을 실수로 그냥 푸시 해버렸을 때

1.
text.txt 파일을 올리고 싶지 않았는데 올려버렸다. ㅠㅠ
2.
삭제하고 다시 푸시해도 안 사라진다..ㅠㅠ
2.
git rm -r --cached 명령어를 통해 test.txt 파일의 캐시를 삭제하면 된다. 그 후 .gitignore에 파일 이름을 추가, 다시 깃 add-commit-push 를 진행한다.
3.
touch.txt 파일이 원격에서는 지워지고 로컬에만 남아있는 상태이고, .gitignore에 파일 이름만 보인다.
4.
원격저장소에는 test.txt 파일이 없지만, 로컬에는 test.txt 파일이 잘 남아있는걸 확인할 수 있다.

참고