git add, commit, push 취소
Goal
- git add를 취소할 수 있다.
- git commit을 취소할 수 있다.
- git push를 취소할 수 있다.
- untracked 파일을 삭제할 수 있다.
git add 취소(파일 상태를 Unstaged로 변경하기)
아래와 같이 실수로 git add *
명령을 사용해 모든 파일을 Staging Area에 넣은 경우, 다시 파일을 빼고 싶을 수 있다.
1
2
3
4
5
6
7
8
9
// 모든 파일이 Staged 상태로 바뀐다.
$ git add *
// 파일들의 상태를 확인한다.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
이때, git reset HEAD [file]
명령어를 통해 git add를 취소할 수 있다.
- 뒤에 파일명이 없으면 add한 파일을 모두 되돌린다.
git commit 취소
- 완료한 commit을 취소해야 하는 경우가 있다.
- 너무 일찍 commit한 경우
- 어떤 파일을 빼먹고 commit한 경우 이때,
git reset HEAD^
명령어를 통해 git commit을 취소할 수 있다.
1
2
3
4
5
6
7
8
// [방법 1] commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존
$ git reset --soft HEAD^
// [방법 2] commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존
$ git reset --mixed HEAD^ // 기본 옵션
$ git reset HEAD^ // 위와 동일
$ git reset HEAD~2 // 마지막 2개의 commit을 취소
// [방법 3] commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제
$ git reset --hard HEAD^
git push 취소
이 명령을 사용하면 자신의 local의 내용을 remote에 강제로 덮어쓰기를 하는 것이기 때문에 주의해야 한다.
- 되돌아간 commit 이후의 모든 commit 정보가 사라지기 때문에 주의해야 한다.
- 특히, 협업 프로젝트에서는 동기화 문제가 발생할 수 있으므로 팀원과 상의 후 진행하는 것이 좋다.
워킹 디렉터리에서 commit 되돌린다.
- 가장 최근의 commit을 취소하고 워킹 디렉터리를 되돌린다.
1 2
// 가장 최근의 commit을 취소 (기본 옵션: --mixed) $ git reset HEAD^
- 원하는 시점으로 워킹 디렉토리를 되돌린다.
1 2 3 4
/ Reflog(브랜치와 HEAD가 지난 몇 달 동안에 가리켰었던 커밋) 목록 확인 $ git reflog 또는 $ git log -g // 원하는 시점으로 워킹 디렉터리를 되돌린다. $ git reset HEAD@{number} 또는 $ git reset [commit id]
- 가장 최근의 commit을 취소하고 워킹 디렉터리를 되돌린다.
git reset 명령은 아래의 옵션과 관련해서 주의하여 사용해야 한다.
- reset 옵션
- soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
- mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
- hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
만약 워킹 디렉터리를 원격 저장소의 마지막 commit 상태로 되돌리고 싶으면, 아래의 명령어를 사용한다.
- 단, 이 명령을 사용하면 원격 저장소에 있는 마지막 commit 이후의 워킹 디렉터리와 add했던 파일들이 모두 사라지므로 주의해야 한다.
1 2
// 워킹 디렉터리를 원격 저장소의 마지막 commit 상태로 되돌린다. $ git reset --hard HEAD
untracked 파일 삭제하기
git clean 명령은 추적 중이지 않은 파일만 지우는 게 기본 동작이다. 즉, .gitignore 에 명시하여 무시되는 파일은 지우지 않는다.
1
2
3
$ git clean -f // 디렉터리를 제외한 파일들만 삭제
$ git clean -f -d // 디렉터리까지 삭제
$ git clean -f -d -x // 무시된 파일까지 삭제
Option
-d
옵션- 디렉터리까지 지우는 것
-x
옵션무시된 파일(.DS_Store나 .gitignore에 등록한 확장자 파일들)까지 모두 지우는 것
Ex) .o 파일 같은 빌드 파일까지도 지울 수 있다.
- n 옵션
- 가상으로 실행해보고 어떤 파일들이 지워질지 알려주는 것
This post is licensed under CC BY 4.0 by the author.