본문 바로가기

Git&Github

커밋(commit)상태와 복구

커밋의 상태와 복구에 대해서 알아보자.

 

앞 포스트에서 배운 것처럼 커밋 기록을 알아보는 명령은

'git log'

 

이 명령을 사용하면 커밋 해시, 버전 만든 날짜, 커밋 메시지 등등

커밋에 관해 알아볼 수 있도록 화면에 나타난다.

 

이전에 실행했던 커밋들이 출력된다.

HEAD -> master : 이 버전이 가장 최신이라는 표시

commit (긴 문자열) : 커밋 해시 또는 깃 해시, 커밋을 구별하는 아이디

Author : 단어 의미 그대로, 버전을 누가 만들었는지 나타낸다.

Date : 이 버전이 언제 만들어졌는지 나타낸다.

그리고 그 밑에 여백에는 'change2'처럼 커밋 메시지가 나타낸다.

 

이렇게 'git log'를 입력했을 때 나오는 정보를 커밋 로그라 한다.

 

 

 

이제 git diff에 대해 알아보자.

 

우선 vim으로 hello.txt 파일을 열어보자.

텍스트 내용은 다를 수 있다.

여기서 기존의 내용을 수정해보자(나는 34를 56으로 바꿔본다.)

이후, 'git status'를 입력해보자.

(입력할 때는 a버튼, 저장 종료는 esc버튼 후 :wq)

보는 바와 같이 modified : hello.txt 가 나타난다

(저 파일이 수정되었다는 의미)

이제 'git diff'를 입력해보자.

빨간 부분이 내가 삭제한 부분이고, 초록 부분이 내가 추가한 부분이다.

(앞에서 34를 56으로 바꿨었다.)

이처럼 'git diff'를 이용하면 어디가 어떻게 변경되었는지 알 수 있다.

(지금 상황에서는 다시 스테이징하고 커밋을 해야 버전이 완료된다.)

 

 

 

 

 

파일 상태 확인하기

 

'vim hello.txt'를 입력한 후 문자를 추가한 후 저장하자.

이후 새로운 파일을 만들어 다른 문자를 저장하자.

(hello2.txt 로 만들었다.)

 

명령어 'git status'를 입력하자.

 문자를 추가한 것은 modified로 나타나고

hellow2.txt는 untracked file로 나타난다.

한 번이라도 커밋을 한 파일이라면 tracked 파일이라 표시하고

한 번이라도 커밋을 하지 않은 파일은 untracked파일이라 표시된다.

 

 

이제 add 명령어를 이용해서 스테이지에 올린 후 git status를 해보자.

(warning은 앞전에 말한 것처럼 무시하자)

모두 스테이지에 올라온 것을 확인할 수 있다.

이제 커밋을 해보자.(메시지도 포함하자.)

change3가 성공적으로 커밋됨을 알 수 있다.

여기서 조금 더 자세히 커밋된 것을 보려면 

'git log --stat'를 입력하자.

로그 메시지가 많을 경우 엔터를 누르면 된다.

이제 여기서 빠져나가기 위해 'Q' 버튼을 누르면 된다.

--------------------------------------------------------------------------------------------------------

 

 

 

이제 버전 상태에 대해 좀 더 자세히 알아보자.

 

'ls -la'를 입력해보자.

이전에 했던 기록을 지우려면 'clear' 명령을 입력하면 된다.

보이는 것처럼 hello와 hello2가 있음을 알 수 있다.

 

hello2 파일을 수정해보자.(vim을 이용한다.)

이후 'git status'를 입력해보자.

Changes not staged for commit 상태가 나온다.

(수정하기 전에 'git status'를 입력하면 working tree clean 메시지가 나온다.)

즉, 파일은 수정되었고 스테이지에 올라가지 않았다고 나오는 것이다.

이 상태가 modified 상태이다.

 

이제 add 명령어를 이용해 스테이지에 올린 뒤에 확인해보자.

Changes to be committed 상태가 나온다.

커밋 직전 단계로, 스테이징 상태에 있는 것이다.

 

이제 커밋을 한 후 확인해보자.

'git commit -m "delete change"

커밋이 완료된 상태이므로 working tree clean 상태가 됨을 알 수 있다.

 

(만일, 이전에 수정 내용을 기록해둔 커밋 메시지를 잘못 입력했다면

'git commit --amend' 명령어를 입력해서 수정하면 된다.)

 

---------------------------------------------------------------------------------------------------------------------

 

 

커밋 취소 및 각 단계로 돌아가는 방법.

 

작업 트리에서 수정한 파일을 되돌리는 명령어

'git checkout'

 

먼저 vim으로 hello.txt를 열고 수정해보자.

두줄을 삭제하고 hello를 넣었다.

'git status'로 확인해보면

역시나 changes not staged for commit :... 이 나타난다.

 

여기서 checkout 명령을 이용해보자.

 

'git checkout -- hello.txt' //붙임표 --를 붙이고 띄어쓰기한 후 파일 이름을 쓴다.

(정상적으로 처리되었으면 아무것도 나타나지 않는다.)

 

이번엔 cat 명령으로 내용을 확인해보자.

보이는 것과 같이 원래대로 되돌아왔다.

 

 

이번엔 vim으로 hello2.txt를 수정해보자

그다음 add 명령어로 스테이징 상태로 넘기고 상태를 확인해보면

modified 가 나타남을 볼 수 있다.(파일이 스테이지에 올라가 있는 상태)

 

스테이지에서 내리려면 'git reset HEAD' 명령어를 이용하자.(대문자 주의)

 

보이는 것과 같이 add 명령어가 취소되었음을 알 수 있다.

(Changes not staged for commit :... // 스테이지에 올라가 있지 않음)

 

 

이제 최신 커밋을 되돌려보자.

 

hello2.txt를 수정해보자 (vim을 이용)

그다음 커밋을 -am을 이용하여 해 보자.

'git log' 명령어를 이용하면 버전이 저장된 상태를 볼 수 있다.

 

최신 커밋을 되돌리려면 'git reset HEAD^'를 이용하면 된다.

git log를 이용하면 커밋이 취소된 것을 확인할 수 있다.

(change4가 사라짐을 볼 수 있음)

 

 

 

이제 특정 버전으로 되돌리는 방법을 알아보자.

 

특정 커밋으로 돌릴 때에는

'git reset (커밋 해시)'를 이용하면 된다.

 

hello-git 디렉터리에 새로운 파일을 만들고 저장한 뒤에 실습해본다.

(test.txt 파일을 만들고 그 안에 문자를 저장했다.)

test.txt 파일을 스테이지에 올린 후 메시지와 함께 커밋한다.

이제 한번 더 수정한 뒤에 다른 메시지로 수정한다.

(vim test.txt를 열어서 두 번째 줄에 문자를 추가했다.)

그다음 commit을 하였다.

이런 식으로 총 4개의 파일을 만들자.

이제 여기서 change good으로 커밋을 되돌려본다.

 

#여기서 주의점#

git reset (@)를 한다면 @커밋을 리셋하는 게 아니라

최근 커밋을 @커밋으로 리셋한다는 뜻이다.

즉, @커밋 이후에 만들었던 커밋을 삭제한 후 @커밋으로 이동한다는 의미이다.

 

change good에 노란 줄(커밋 해시)을 복사한다(commit 이후에 나온 문자열)

이후 'git reset --hard 커밋 해시' 명령어를 사용하자.

이제 'git log' 명령어를 이용해 로그 기록을 살펴보면

change good 이후의 커밋은 삭제되고 최신 커밋으로 남아있게 된다.

test.txt 파일 안에 저장했던 문자 또한 change good을 커밋했을 때

저장되었던 문자가 최신으로 남아있게 된다.

 

 

마지막으로 커밋을 삭제하지 않고 되돌려보자

'git revert' 명령어를 이용하면 된다.

 

우선 vim으로 test.txt를 수정한 후 메시지와 함께 커밋한다.

그럼 이전에 만들었던 것과 a가 추가되어 있음을 확인할 수 있다.

 

이제 가장 최신인 a버전을 취소하고 change good 커밋으로 돌아가려고 한다면.

revert 명령어를 사용해보자.

revert 명령어의 커밋 해시는 a의 커밋 해시를 사용한다.

'git revert 커밋 해시'

 

그럼 다음과 같은 화면이 나온다.

문서 맨 위에 추가로 남겨둘 내용이 있으면 입력하고 저장한다.

(vim 이랑 명령어는 동일)

이제 git log를 이용하여 확인해보자.

revert commit이라고 잘 나온다.

이제 내용이 다시 돌아갔는지 확인해보기 위해 

'cat test.txt'를 해보면 추가했던 문자가 없어져있음을 확인할 수 있다.

 

 

'Git&Github' 카테고리의 다른 글

브랜치(branch)(ⅱ)  (0) 2020.03.12
브랜치(Branch)  (0) 2020.03.12
-깃 버전관리(Commit)-...(ⅲ)  (0) 2020.03.10
리눅스 명령(자주 사용하는 기초명령어)...(ⅱ)  (0) 2020.03.06
-깃 기초단계 - (bash 기초)...(ⅰ)  (0) 2020.03.06