Collaboration Tool/Git & Github

Git] Terminal : 히스토리 생성, Reset, Revert (미완)

littlezero48 2022. 10. 31. 05:16

 

 

여러 변화를 만들어보고 과거로 돌아가보자

 

변화만들기

 

1. 히스토리 생성하기  = 타임캡슐 묻기

D.txt를 새로 생성하고, gitignore를 추가하며, B.txt를 변경했다면

git status 명령어는 이렇게 출력될 것이다

Changes not staged for commit은 기존에 올라간 파일 중 수정됬으나 commit은 안된것

Untracked files는 git에 올라간 적이 없는 파일이다.

 

2. 일단 모든 파일을 git add . 명령어로 스테이지에 올린다 

다시 git status를 해보면 commit될 준비가 된 파일들을 볼수 있다.

 

3. commit을 해주면

 

4.  마지막으로 푸쉬를 해주면 새롭게 히스토리를 생성해서 깃허브에 보낸걸 확인가능하다.

 

 

 

 

 

 

 


과거로 되돌리기

Reset

reset은 과거로 돌아간 다음 이후 히스토리를 지우는 방식. 이 방식은 특히 협업시 다른 사람들의 코드와 충돌되는 문제가 발생하기 때문에 잘 사용하지 않는다.

 

1. git log로 히스토리 내역을 확인 할 수 있다.

git log

보이는 화면에서는 5개의 히스토리가 존재한다. 가장 최신이 위의 것으로 오래될 수록 아래에 보인다

이 중 바로 전 커밋인 ready로 돌아가보자

 

git reset --hard (돌아갈 커밋 해시

커밋 해시라는 건 Commit 뒤 코드를 의미하며 우리는 ready로 돌아갈 것이니 빨간줄 부분을 복사한다

명령어를 실행하면 HEAD가 ready로 이동했다는 메세지가 뜨며 다시 git log를 치면 ready 이후의 기록은 사라진 것을 확인 할 수 있다.

 

 

+ reset을 돌리는 방법

더보기

reset을 하기전 .git 폴더를 백업해놓았다가 다시 붙여넣으면 다시 이전 커밋를 볼수 있다.

 다만 git status로 보면 지워졌던 커밋의 변화가 적용되어 있지 않다

다시 완전히 돌릴려면 해시 없이 아래 코드를 치면 완벽히 reset하기 이전으로 돌아간다

git reset --hard

 

 


 

 

Revert

Revert는 히스토리를 지우는게 아니라 변화를 거꾸로 수행하는 방식으로 거꾸로 수행했다는 것 마저 기록을 남긴다.

그리고 여러 히스토리 이전의 단 하나만 수정해야하는 경우라면 Reset은 하나만 수정해야하는데 이후 모든것을 지워버리는 문제가 생기는데 이때 Revert를 사용하면 하나만을 수정하여 이후 히스토리에는 영향을 주지 않는다 

 

 

1. git log로 히스토리 내역을 확인 

git log

 

2. 이번엔  A>D로 바꾼 하나만 다시 돌리는 작업을 해보자

git revert (돌릴 커밋 해시

3. 명령어를 치면 해당 창으로 넘어온다

revert comment도 여기서 알아서 써주니

:wq

로 저장하고 종료한다

 

 

4. 그러면 A.txt내용이 D였던게 다시 A로 돌아와 있다.

git log를 쳐보면 또한 revert한 커밋 내역이 최근에 추가된 것을 알수 있다.

 

 

+ revert 할때 이후 커밋에 영향을 주는 부분을 돌렸을때 처리하는 방법에 대해선 나중에 추가로 넣기로