메타코딩 -무작정 깃허브 찍먹하기 -2- (Git Reset, Reflog or Git 최종 로그변경하기)
전 기록에 이어서 되돌리기 명령어를 사용해 보자.
위 처럼 c:drive에 만들었던 gitworkspace의 폴더에 ex03폴더를 생성 후 git bash CLI를 키고 git init후 test1, 2 파일을 다음과 같은 내용으로 만든 후 git add . 를 한 후 커밋을 해 준다. 그러고 깃 로그를 확인 해 보자.
이런식으로 헤드에 저장이 된 것을 확인 할 수가 있다. 그런데 2번째 커밋으로 들어 간것이 깃로그가 마음에 들지않는다. 오타가 생겨서 잘못 들어갔다. 그러면 이제 로그를 복구하고 싶을때가 이런식으로 생기는데...
이 것을 복구하는 명령어는 git reset이라는 것인데. 해당 명령어에는 옵션이 세 가지가 존재 한다. 알아보자~..
reset이라는 명령어의 옵션에는 soft, mixed, hard가 존재한다. 여기서 현재 위에 그림처럼 만들어진 상황에서. 빨간X표 친곳을 다 날린다는 뜻이다.
그리고 reset mixed라는 옵션을 사용할 경우 위처럼 작업 영역에 파일변경만 된 상태고 git add 하기 전 상태가 되는 것이다. hard는 좀 위험한게 변경한 파일도 날아감.. ㅋㅋ;
reset soft는 헤드에 저장된 값만 날린다. 그러면 자동으로 헤드는 1. 첫번째 사진을 보게 된다. 정리 하자면
soft는 커밋로그 변경시에 사용하는 개념이고, mixed는 작업영역의 내용 test2.txt를 좀 바꾸고 싶다 할때 사용하는 것..
hard는 test1만 존재하던 상태로 돌아가고 싶다는 뜻이다. 우리가 하고싶은건 커밋 메세지 변경이기 때문에 soft를 사용해 주겠다.
git reset --soft 해쉬값 이런식으로 넣어주면 된다. 그니까 현재 바꾸고자 하는 로그 앞의 헤드의 해쉬값을 입력 해 주면 되며, soft 뒤에 해쉬값은 635024~~ 다넣어줄 필요없이 다른 파일들의 해쉬값과 겹치지않을 정도 4자~ 5자만 입력하면 자동으로 알아서 찾아준다. 다시 올바른 메세지로 git commit을 해주고 log를 확인 해 주면
이와 같이 수정이 된 것을 볼 수 있다. 그니까 바로 직전에 로그를 바꾸고 싶으면 그 앞의 해쉬값을 쓰면 되는데.. 첫번째 꺼의 메세지를 바꿀 순 없다. 할수는 있는데, 엄청 오래걸리고 쓸데없는 짓이래 강의에서..
그러면 이제 mixed를 사용 해 보자. 왜 사용 하고싶냐면..
이런 식으로 test2 안의 내용을 변경 해 주고싶은데.. 이미 git log 처럼 2. 두번째 사진이 헤드에 올라가있기때문에.. 내용을 변경 해서 다시 두번째 사진을 저장하고 싶으면
git reset --mixed 해쉬값 입력을 해 주고 git status를 확인 해 보면 빨간색 test2.txt가 변경만 감지 된 것을 확인 할 수 있따.
작업 영역에 파일은 살아있는 것을 확인 할 수 있다.
그러면 다시 수정 후 add, commit 해 주면 기존에 내용이 살아있는 상태에서 수정한 상태가 들어가게 된다. mixed는 영상 강의자는 별로 현업에서 안써봤데.. 아마 사용빈도가 hard, soft, mixed 순인듯.
git reset --hard는 다음과 같이 모든게 날아간다. 작업영역에 있던 파일까지. git log를 찍어보면 기록도 남아있지않다.
새로운 파일 test3.txt를 만들어서 첫번째 내용만 입력 후 add or commit 해주고 만약에 내용을 변경 하고싶으면 굳이 복잡하게 mixed 옵션을 사용 하는 것 보다. 내용 추가 후 add or commit 후 v2로 남기는게 훨씬 낫다..
그러면 로그가 지저분 한것 같지만 이 것도 나중에 깔끔하게 정리 할 수가 있다. 그건 다음에..
이제 이 상태에서 test3 말고.. 다시 2번째 사진을 살려야 할거같은데?.. log도 안남아있자나.. 이럴때 Reflog 명령어를 사용한다.
git reflog를 입력하면 이렇게 뭐가 주루룩 뜨는데.. 뭐냐면 우리가 한번이라도 커밋했던.. 모든 기록이 남아있는 것이다.
빨간밑줄의 두번째 사진의 해쉬값을 git reset --hard 해쉬값 입력 후 git log를 해보면 다시 돌아간 것을 볼 수 있다.
이게 reflog 명령어의 활용법이다. reflog는 여기까지...
이제 다시 gitworkspace로 돌아가서 ex04폴더 안에 git init 후 test1.txt 파일을 생성 하고, add & commit을 해주자.
이번에 할 것은 최종 로그 변경을 해 볼 것이다.
현재 내가 commit 한 곳에 "test3.txt 생성 완료"라는 로그가 마음에 들지 않는데 현재 commit을 하나밖에 없어서 돌아갈 해쉬값이 저장 되어있지 않기 때문에 reset을 사용 못하는 상황이다!... 이럴때는 어케 해야하는지 알아보자.
이런 식으로 git commit --amend -m "들어갈 내용" 명령어를 입력하면 최종 로그가 변경이 된다.
그래서 간단하게 정리하자면
위의 그림처럼 최종 로그변경 시에는 git commit --amend 선택 시에는 git reset --soft 전해쉬값~ 이런식으로 사용 하면 되겠다.!! 깃 기본기 실습은 여기까지.