
지난주 개인 프로젝트를 해설강의를 보며 수정하고
test브랜치를 Main브랜치에 Merge 시도
대량의 수정사항이 포함이 되어있었고 충돌이 발생
충돌 부분 discard 후 이것 저것 만져서 커밋
근데 머지한 내용은 적용이 안 되어서 다시 Merge 하려 했더니
이미 된 걸로 표기
늦은 시간이라 누구에게 물어볼 수도 없는 상황
Gemini에게 이것 저것 물어보다가 Rebase가 무엇인지 물어봄
간단하게 말해 Main 브랜치의 내용에 Test의 브랜치 내용으로 덮어버리는 작업
공동 작업에서는 위험하지만 개인 작업에서는 좋은 해결방법이라 말함
따라하다가 무언가 아닌 것 같은 느낌이 들어 내가 어떻게 했는지 질문하면서
맞게하고 있는지 계속 질문 했지만 맞다고 함
결국 반대로 덮어지는 현상이 생김
Rebase한 것을 복구하기 위해서 Gemini에게 물어본 결과
Git Bash로 복구하는 법을 알려줌
근데 생각해보니 Main 브랜치에서 이 방법을 사용하면 되는거 아닌가 싶어서 Test브랜치로 시험
성공 후 Main 브랜치에 작업



<1>
해당 프로젝트 폴더에 들어가 마우스 우클릭하면 Git Bash가 있는데
그걸 누르면 경로가 자동 설정 됨
<2>
git reflog <해당 브랜치 이름>
Git이 브랜치의 HEAD가 변경될 때마다 기록하는 로그
Rebase를 포함한 모든 브랜치 이동 기록을 확인할 수 있으며,
특정 시점으로 HEAD를 되돌릴 수 있다.
<3>
your_branch_name@{0}: rebase finished: returning to refs/heads/your_branch_name
your_branch_name@{1}: rebase -i (finish): <커밋 메시지>
your_branch_name@{2}: rebase -i (start): HEAD onto <베이스 브랜치>
your_branch_name@{3}: checkout: moving from <이전 커밋 해시> to your_branch_name
your_branch_name@{4}: commit: <이전 커밋 메시지>
대충 이런식으로 출력
f를 누르면 중지
<4>
예를 들어
git reset --hard your_branch_name@{3} -> 리베이스 하기 전 커밋
이 시점으로 돌아간다.
@{숫자}가 작을수록 최신 커밋 내용이다.
즉, @{0 ~ 2} 내용은 지워지고 @{3}이 @{0}이 되는 것이다.
<5>
git status
Your branch is behind 'origin/<브랜치 이름>' by <숫자> commit(s):
로컬 브랜치가 원격 브랜치와 얼마나 동기화되어 있는지 알려줌
nothing to commit, working tree clean 메시지는 현재 워킹 디렉토리에 커밋할 변경 사항이 없고,
Git이 추적하는 모든 파일이 마지막 커밋 상태와 동일하다는 것을 의미
<6>
git log --oneline
깃허브 데스크탑에서 히스토리 보는 것과 비슷
현재 여기까지 기록되어 있다는 의미
<7>
git push -f origin main
강제로 main브랜치를 푸쉬하는 작업
rebase가 아닌 git bash로 test브랜치와 main브랜치 모두 무사 복구를 마침.
정상적인 작동도 잘 되었다.
물론 test브랜치 베이스의 스페어 브랜치를 두고 있었음