Git 뿌수기

02. [Git 뿌수기] 2주차 내용 정리 (add 취소, commit 취소, push 취소, revert, reset)

drizzle0925 2021. 8. 30. 12:38
728x90

1. add 취소

1) 한 번도 commit 한적 없는 파일을 취소할 때

$ git rm --cached <fileName>

 

commit 한 적 없는 파일의 경우 위에 명령어를 사용하면 됩니다.

$ git rm --cached work2.txt

 

그러면 add 이전으로 돌아가게 됩니다.


2. commit 취소하기

2) 한번이라도 commit 한 적 있는 파일을 취소할 때 / commit 취소하기

reset이라는 명령어를 사용해서 commit을 취소합니다.

HEAD^는 HEAD에서 한단계 이전 단계로 이동한다는 뜻입니다.

$ git reset <fileName> HEAD^

 

reset에는

1. soft : commit을 취소하고 작업 파일들을 add 된 상태로 유지한다.

2. mixed : commit을 취소하고 작업파일들은 add 되지 않은 상태로 유지한다

3. hard : commit을 취소하고 작업파일을 삭제한다.

3가지 옵션이 존재하고 아무것도 적지 않으면 기본값으로 mixed가 설정되어 있습니다.

 

soft

$ git reset --soft HEAD^

reset 명령어를 입력후 commit 이력을 확인하면 work 2 커밋이 사라진 것을 확인할 수 있습니다.

 

 

파일 상태는 add 된 상태로 돌아가 있습니다.

 

mixed

$git reset --mixed HEAD^

 

위 명령어를 입력하면 커밋이력이 삭제되고 파일 상태는 add 전 상태로 돌아갑니다.

 

hard

$ git reset --hard HEAD^

 

위 명령어를 입력하면 커밋 이력이 삭제되고 파일도 함께 삭제된 것을 확인할 수 있습니다.


3. push 취소하기

1) revert

revert는 취소한 내용에 대해 commit 이력을 남기면서 취소합니다. 

revert는 제일 끝에서부터 하나씩 커밋을 취소해야 됩니다.

work 2의 커밋 내용을 revert를 이용해서 push를 취소해보겠습니다.

 

revert는 다음 명령어를 사용합니다.

git revert <commit_id>

 

work 2 내용을 취소하고 원격 저장소에 그 내용을 다시 업로드하겠습니다.

work 2 내용을 revert 함

$ git revert 1774187

revert 커밋 내용 작성

 

원격 저장소에 push 함

 

revert 한 커밋 이력이 추가되었습니다.

 

 

수정 내역을 확인해보니 work 2 commit에서 work 2.txt 파일을 추가했는데 revert "work 2"에서 work2.txt파일을 삭제한 것을 확인할 수 있습니다.

 

2) reset

reset은 취소한 내용에 대해 commit 이력을 남기지 않고 취소합니다.

 

이번에는 reset 이용해서 work1로 돌아가 보겠습니다. 

reset을 사용하면 커밋이 이력이 모두 날아가므로 신중하게 사용해야 합니다.

$ git reset --hard <commit_id>

 

work1로 돌아가겠습니다.

 

$ git reset --hard d5d6978

 

reset을 한 뒤 일반적으로 push를 하면 에러를 발생시킵니다.

repository(원격 저장소)의 커밋 이력과 로컬 저장소의 커밋이 이력이 다르기 때문에 발생합니다.

 

둘 중에 하나의 명령어를 사용해서 강제로 원격 저장소에 push 해줍니다.

$ git push origin master -f
$ git push origin +master

 

원격 저장소의 커밋 이력을 확인하면 이전 커밋 이력들이 모두 다 날아간 것을 확인할 수 있습니다.

 

reset 취소하는 법

아래 명령어를 입력합니다.

$ git reflog

 

HEAD@{0}을 보면 방금 제가 reset을 이용해서 d5d6978로 이동했다는 내용이 적혀있습니다.

HEAD@{1}로 이동하면 reset 이전으로 되돌릴 수 있습니다. 

아래 명령어를 입력합니다.

$ git reset HEAD@{1}

 

다시 한번 원격 저장소로 commit 이력을 push 합니다.

 

reset 한 이력들이 되돌아온 것을 확인할 수 있습니다.

728x90