🔍 개요
프리코스를 진행하면서 실수로 branch를 만들고 체크아웃을 하지 않고 미션을 진행했다.


이런 경우 첫 번째 커밋을 제외한 나머지는 전부 롤백시키고, 그동안 진행한 커밋들을 branch로 옮겨야 하는데..
1.새로운 브랜치 생성 및 체크아웃
먼저 옮길 브랜치를 생성하고 해당 브랜치로 체크아웃합니다.
git checkout -b <브랜치-이름>
2.커밋 해시 찾기
git log # 첫 번째 커밋 해시를 확인하세요. (방향키로 조작 가능)
git reset --hard <첫-커밋-해시>
git log 명령어를 사용하여 main 브랜치의 첫 번째 커밋 해시를 찾습니다. (만약 다른 해시로 복구하려면 그걸 복사)
그런 다음 첫 번째 커밋 상태로 브랜치를 초기화합니다.
<첫-커밋-해시>는 실제 첫 번째 커밋의 해시로 교체해야 합니다.
3.main 브랜치에서 나머지 커밋 복사
이제 git cherry-pick 명령어를 사용하여 첫 번째 커밋을 제외한 나머지 커밋을 원하는 브랜치로 복사합니다.
git cherry-pick <첫-커밋-해시>..main
이 명령은 첫 번째 커밋 다음 커밋부터 main 브랜치의 최신 커밋까지 원하는 브랜치로 가져옵니다.
4.원하는 브랜치를 원격 저장소에 push
원하는 브랜치에 변경 사항을 원격 저장소에 push합니다.
git push origin <브랜치-이름>
5.main 브랜치 원복(주의!)
git checkout main
git reset --hard <첫-커밋-해시>
git push --force-with-lease origin main
--force-with-lease 옵션은 다른 사용자가 이미 새로운 커밋을 push하지 않았는지 확인하고, 그렇지 않은 경우에만 강제로 push를 수행합니다.
[주의]
git push --force 또는 git push --force-with-lease 명령은 원격 저장소의 히스토리를 변경하기 때문에, 협업하는 다른 개발자에게 영향을 줄 수 있습니다. 이러한 명령을 사용하기 전에 팀원들과 상의하는 것이 좋습니다.
'Error > 개발환경' 카테고리의 다른 글
| [OpenAI] ChatGPT API 오류 - 429 Too Many Requests (0) | 2024.12.09 |
|---|---|
| [ElasticSearch] Spring data elasticSearch 인증 관련 오류 해결 (3) | 2024.09.06 |
| SourceTree 무반응, 안켜짐, 실행안될때 (0) | 2023.06.20 |
| [SpringBoot Data JPA] 'Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set' 오류 (0) | 2023.04.23 |