돌공공돌

[Git] git revert && reset && rebase! (❁´◡`❁) 본문

IT/Git

[Git] git revert && reset && rebase! (❁´◡`❁)

오로시 2020. 4. 19. 15:19

 

git 에서 commit 했는데, 과연 거기서 문제가 생긴다면 어떻게 해야 할까?

 

그걸 담당하는 명령어가 revert 와 reset 이다!


commit 되돌리기

git revert HEAD

 

 

revert : 특정 시점의 commit 상태로 변경하는 commit을 추가로 만든다. --> 마치 문제된 commit 이 없었던 것 '처럼 ' 처리한다.

 

 

 

 

구현 모습 

1. v1.txt 를 만들어 v1 이라는 내용을 입력하고, add 와 commit 한다.

2. v1.txt 의 내용을 v2 로 바꾸고 add와 commit 한다.

3. v1.txt 의 내용을 v3 로 바꾸고 add와 commit 한다.

 

 

4. git revert HEAD 라고 입력한다.

5. V1.txt 의 v2 를 내용을 확인한다. 

 


git reset [version code]

 

reset : commit 자체를 과거로 되돌린다. 그리고 문제된 commit 을 제거한다.

 

1. 각각의 버전을 만들어 줍니다.

2. git log 로 로그 를 확인합니다.

3. v2 로 돌아가기 위해, v2의 코드 067d5b7을 입력합니다.

4. git log로 확인 합니다.

쨘 v3는 사라졌네요!


git rebase

 

이름의 뜻은 무엇일까? base를 새로 바꾼다는 말은 무슨 말일까요?
왜 사용하는가? : 과거의 commit으로 잠시 돌아 갈 수 있다. 예전의 commit message를 수정할 수 있다. 
다시말해 , 잠시 commit들의 base를 과거로 바꾼 다음에 메시지 수정 (reword) 할 수 있다.

 

 

1. 총 4개의 버전을 만들어 뒀다. (위의 그림처럼)

 

 

2. 그래서 rebase -i --root을 입력 했는데, 왜인지, 오류가 뜬다.  commit 하거나 stash를 하라한다. stash가 대체 뭔지,,

반신반의로 stash를 했다. 

그랬더니 된다.! vim 에디터로 들어와 pick 을 reword로 바꾸었다.

그 뒤 commit 메시지를 바꾸어 주었다.

 

그랬더니 , 성공적으로 rebase 되었다고 한다. 휴... 

git log로 확인하니, commit 메시지가 바뀌었다.


 

 stash를 이용하면 작업중이던 파일을 임시로 저장해두고 
 현재 브랜치의 상태를 마지막 커밋의 상태로 초기화 할 수 있습니다. 

생활코딩 https://opentutorials.org/course/2708/15332

 

stash - 생활코딩

수업소개 다른 브랜치로 checkout을 해야 하는데 아직 현재 브랜치에서 작업이 끝나지 않은 경우는 커밋을 하기가 애매합니다. 이런 경우 stash를 이용하면 작업중이던 파일을 임시로 저장해두고 현재 브랜치의 상태를 마지막 커밋의 상태로 초기화 할 수 있습니다. 그 후에 다른 브랜치로 이동하고 작업을 끝낸 후에 작업 중이던 브랜치로 복귀한 후에 이전에 작업하던 내용을 복원할 수 있습니다. 여기서는 이 기능에 대해서 알아봅니다.  수업

opentutorials.org

에서 퍼온 말이다. 뭔가 내가 작업중이던, work repository 의 head 가 올바르게 업데이트 되지 않았었나 보다.

관련 영상이 저기에 있으니 저기서 배우면, 도움이 많이 될 것 같다.


추가!👻👻

 

git log 옵션

 

git log -- graph--decorate -- oneline 

 

--graph : 시각적으로 log 의 변경 모습을 보여준다.

--decorate : HEAD 의 위치를 알려준다. --> 아까 stash 하기 전의 head 가 아마 ver4가 아니었기 때문에, 문제가 생긴게 아니었을까..

--oneline :  간단하게 한줄로 보여준다.

 

--graph 옵션은 없다!

Comments