git을 사용하다보면 관련없는 파일을 git add
로 파일을 추가했다던가, 모든 파일을 add하지 않은 채 git commit
으로 이미 커밋해버렸다던가, 변경된 내용을 commit하지 않은 채 git push
를 해버리는 등의 여러 상황을 겪어보았을 것이다.
오늘은 잘못한 add, commit, push를 취소하는 방법에 대해 알아보자.
git add 파일명.확장자
: 특정 파일을 Staging Area에 넣은 경우git add *
: 모든 파일을 Staging Area에 넣은 경우
이러한 경우 git reset HEAD [file]
명령어로 git add
를 취소할 수 있다.
git reset HEAD [file]
: 특정 파일의 add를 취소함git reset HEAD
: add한 파일 전체를 취소함
예시 화면을 살펴보자.
아직 작업을 다 마치지 못한 상태에서 commit을 해버렸다던가, 몇몇의 파일을 포함하지 않은 채 commit을 해버린 경우가 있을 것이다. 그럴 때에는 다음과 같이 하면 된다.
git log
: 우선 log 명령어로 commit 목록 확인하기git reset --soft HEAD^
: commit취소 후 해당 작업 파일들을 staged 상태로 보존
(soft는 index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존))git reset --mixed HEAD^
orgit reset HEAD^
: commit 취소 후 해당 작업 파일들을 unstaged 상태로 보존
(mixed는 index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션))git reset HEAD~3
: 마지막 3개의 commit을 취소함git reset --hard HEAD^
: commit 취소 후 해당 작업 파일들은 unstage상태로 삭제
(hard는 index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소)
예시 화면을 살펴보자.
commit message의 내용을 잘못 적은 경우가 있을 수 있다. 그럴 땐 git commit --amend
를 하면 된다.
git push를 취소할 땐 특정 commit으로 되돌아 갈 수 있는데, 이 때 되돌아간 commit 이후의 모든 commit정보가 사라지니 잘 유의해야 한다!
git reset HEAD^
: 최신 commit을 취소한 후, working directory를 되돌리기git reflog
orgit log -g
: Reflog(branch와 HEAD가 가리킨 커밋) 목록 확인git reset HEAD@{number} or
git reset [commit id]`
: 원하는 시점으로 directory를 되돌리기git commit -m "커밋메시지 작성"
: 다시 commit하기git push origin [branch name] -f
orgit push origin +[bn]
: 원격 저장소에 강제로 push하기
5번의 -f
나 +[branch name]
은 경고를 무시하고 강제로 push하는 방법이라고 한다.
git clean
은 추적 중이지 않은 파일(untracked file)만 지우는 기본 동작이다.
git clean -f
: dir을 제외한 파일들만 삭제git clean -f -d
: dir까지 삭제git clean -f -d -x
: 무시된 파일까지 삭제git clean -n
: 지워질 파일을 가상으로 알려줌