임시 객체로 치환(replace)
저장소 분리
1. 저장소를 분리할 수 있도록 새로운 브랜치를 생성한다.
2. 깃허브에서 위 저장소와 동기화할 새로운 원격 저장소를 생성하고 로컬 저장소에 등록한다.
3. 생성한 브랜치를 원격 저장소로 푸시한다. 이때 로컬 저장소의 브랜치는 분리 기준이 되는 worked 브랜치이다. 그리고 원격 저장소로 전송되는 브랜치는 main 브랜치이다.
이제 원격 저장소는 커밋 3개만 main 브랜치에 가지고 있다.
4. 저장소를 분리하기 위해 commit-tree 명령어로 가상의 임시 객체를 생성한다. 이 객체는 아직 다른 어떤 객체와도 연결되지 않고 떨어져 있는 객체이다.
5. 생성된 임시 객체를 다른 커밋 객체와 리베이스하여 병합한다. 결과로 이전에 있던 커밋들과 연결 고리가 끊어져 분리되었으며 로그 기록에는 최상위 부모 커밋이 임시 객체로 변경되었다.
6. 새로운 원격 저장소를 하나 더 생성하고 분리된 저장소를 등록한다. 이후, 분리 작업한 로컬 저장소를 원격 저장소로 푸시한다.
새로운 원격 저장소에는 임시 객체로 시작되는 커밋 기록을 확인할 수 있다.
저장소 연결
1. 분리된 두 원격 저장소 중에서 마지막에 작업한 커밋으로 원격 저장소를 복제한다. 복제된 저장소는 이전의 커밋 정보들은 보관되어 있지 않으며 분리된 커밋들만 가지고 있다.
2. 이전 커밋 정보들이 보관된 원격 저장소를 등록한다.
3. 수동으로 커밋을 변경하여 병합하기 위해 원격 저장소를 패치하여 커밋들을 가져온다.
4. origin/main의 커밋과 worked/main의 커밋을 replace 명령어로 연결하면 분리된 저장소가 다시 하나로 묶이게 된다.