이전 게시물의 결과.
다섯 가지의 버전이 만들어짐.
이것을 바탕으로 프로젝트를 원하는 시점으로 돌아갈 수 있음.
이때 다른 폴더 하나 만들어서 현재 .git 폴더를 백업해두기.
과거로 돌아가는 방식 | HOW |
---|---|
reset | 해당 과거로 돌아가면 이후 행적은 히스토리에서 지워짐 |
revert | 내역을 삭제하지 x. 특정 부분 취소해야 하는 경우 유용 |
협업을 위해서는 revert를 활용하자.
지금 시점을 기준으로 이전 시점으로 돌아가고 싶다면?
git log를 통해 돌아가려는 시점의 일련번호를 복사함.(아니면 앞 몇 글자만 따와도 됨)
이후 git reset --hard (돌아갈 커밋 일련번호)
입력.
현재 상태는 이전 시점으로 돌아간 것임.
한 걸음 더 나아가서 FIRST COMMIT으로 돌아가고 싶다면?
git log
를 통해서 일련번호 복사한 뒤,
git reset --hard 일련번호
맨 처음 버전으로 돌아간 것을 확인할 수 있음.
++ git pratice에 있던 .git 폴더 지우고,
백업 폴더에 따로 넣어두었던 .git 파일을 집어넣기.
다시 이 화면이 뜰 것임.
git reset --hard
이 코드를 터미널에 치면,
마지막으로 묻은 타임캡슐로 돌아가는 기능.
파일들이 'Replace arsenal with manU' 파일로 돌아가 있는 상황.
대신, mancity.yaml 파일은 현재 git의 관점에서 보았을 때,
Untracked file에 해당. git 입장에서는 새로 만들어진 파일이라고 생각.
그래서 내버려둔 것임. 그냥 수동으로 삭제하면 됨.
삭제 후, git status를 통해 모든 파일이 커밋된 것을 알 수 있음.
소스트리에서도 확인 가능.
reset은 돌아갈 시점 커밋의 일련번호를 구했음.
revert는 취소할 커밋의 일련번호가 필요함.
만약, 'Add 굴리엘모 비카리오 to tottenham' 커밋으로 돌아가고 싶다면?
git log
를 통해 일련번호 찾아서
git revert 일련번호
입력.
그럼 요런 화면이 뜬다.
git commit을 했을 때와 같은 화면이지만, 이미 commit 메시지가 입력이 되어있는 상태. 뭔가를 더 작성할 필요가 없다면 그대로 저장하면 됨.
↓ tottenham.yaml 파일의 members에서 굴리엘모 비카리오가 사라짐.
소스트리에서 보면 'Add to 굴리엘모 비카리오 to tottenham' 이 내역을 반대로 실행하는 commit 하나가 새로 생긴 것을 알 수 있음.
이제는 'Replace mancity with liverpool' 커밋으로 가보겠음.
위에서 차례대로 수정, 추가, 삭제된 파일들이다.
그렇다면,
그런데, 여기서 문제가 발생함.
'Replace arsenal with manU'에서 liverpool.yaml 파일을 수정했었음.
그렇다 보니,
'Replace mancity with liverpool' 커밋에서 liverpool.yaml을 revert로 삭제해야 하는데, 'Replace arsenal with manU'에서 liverpool.yaml을 수정한 부분과 충돌이 발생.
이번에는 소스트리에서 일련번호를 복사해
git revert 일련번호
입력.
오류가 뜸. 'reverting'이 현재 진행형이라는 뜻.
liverpool.yaml 파일이 삭제되지 않고 남아있음.
내가 원하는 것은 liverpool.yaml 파일이 삭제되는 것임.
컴퓨터도 나에게 힌트를 줌...
git에서 add를 쓰든 remove를 쓰든 상황을 해결하고 나서 revert를 수행하라... 그래서 liverpool.yaml을 지우기 위한 명령어를 입력하자.
git rm 지우고 싶은 파일 이름
git commit을 한 것과 같은 화면이 뜨면 그냥 ctrl + w 누르고 나오면 됨.
소스트리에서 확인해보면 revert가 잘 된것을 확인할 수 있음.
이 커밋으로 돌아가려고 한다면?
소스트리에서 확인하면 ↓