오늘은 되돌리기에 대해 공부해 볼 예정이다.
- WorkingCopy Index Repository
- Reset
- Revert
커밋하기 전까지 즉 최초의 버전을 만들기 전까지는 git 이 관리해주지 않는다.
하나의 버전에는 화면과 같이 여러 개의 파일이 올라갈 수 있다.
화면에서 스테이지에 올라가지 않은 파일
공간을 WorkingCopy
라고 부르며 이 공간에 있는 파일들을 체크하는 행위를 add 라고 한다.
스테이지에 올라간 파일
공간을 Index
또는 Staging area
라고 부르며 이곳에 add 한 파일을 올리고 commit 을 하게되면 저장소에 하나의 버전으로 저장된다.
그림으로 나타내면 다음과 같다.
Reset 은 선택한 버전의 상태로 바뀌도록 하는 작업이다. 즉 버전을 삭제하고 이전 버전의 상태로 돌아간다.
예를 들어서 git 수정하기 버전에는 // git 수정하기 문장이 추가되어있다.
그런데 // git 수정하기 문장이 추가되기 전인 InterestManager 버전으로 되돌리고 싶어졌다.
이 때 Reset
을 사용할 수 있다. 화면에서는 이 커밋까지 현재 브랜치를 초기화
를 클릭하면 된다.
Soft 와 Mixed 와 Hard 세 가지 항목이 있는데 Hard 를 클릭해야 완전히 삭제된다.
Mixed 는 저장소는 선택한 버전의 상태로 되돌리되 WorkingCopy 즉 작업 상태는 그대로 유지한다.
주의 사항은 협업을 할 때 이미 올라간 버전은 Reset 을 하면 안된다. 위험한 행동이다 ✍️
Reset 은 완전히 삭제를 하는 것이기 때문에 위험성이 있다. 반면 Revert 는 기록을 훼손하지 않고 과거로 되돌리는 것이다. 즉 버전을 삭제하지 않고 이전 버전의 상태로 돌아간다.
정확하게 말하면 선택한 버전의 이전 상태와 같이 파일의 내용을 변경시켜주고 그런 내용을 가진 새로운 버전이 자동으로 생성된다.
git 수정하기 버전에서 Revert
인 커밋 되돌리기
클릭하면 해당 버전을 삭제하지 않고 InterestManager 추가 버전의 상태로 돌아간다.
즉 git 수정하기 버전의 이전 상태인 InterestManager 추가 버전으로 파일의 내용을 변경시켜주고 InterestManager 버전의 내용을 가진 새로운 버전이 자동으로 생성된 것을 볼 수 있다.
🎈 Revert 는 역순으로 한 단계씩 해주어야 충돌이 발생하지 않음
추가적으로 git 히스토리를 삭제하고싶어서 방법을 찾아보았는데 git 명령어를 사용하면 된다. 링크는 Reference 에 달아두었다.