Github에서 commit 후 push 했을 때 원격 저장소에 반영되어서 잔디가 심어진 줄 알았다. 그런데 !!!!!!!! 🌱잔디🌱가 없었다. 🙃
알고보니 로컬에서 Github user와 email 설정을 해주지 않아서 발생한 문제였다.
그래서 뒤늦게 Github user, email을 설정했다.
git config --global user.name "이름" //이름 설정
git config --global user.email "이메일" //이메일 설정
push를 하지 않았다면 commit author만 변경해서 push하면 된다.
하지만 이미 commit 후 push를 해버린 뒤 깨달았다. 바보 🥴
그래서 생각한 방법은, 이미 push한 commit 전체의 author를 수정한 뒤 저장소에 강제로 push하는 것이다.
git log
를 사용해 특정 commit hash를 가져올 수도 있지만, 나의 경우에는 전체 commit을 수정해야 했기 때문에 --root
를 사용해 rebase를 진행했다.
git rebase -i --root
특정 commit에 접근하고자 한다면 해당 특정 commit의 이전 해시에 접근해야 한다.
git log //해시 로그 보기
git rebase -i 'hash주소'
두 개의 공통 Base를 가진 Branch에서 한 Branch의 Base를 다른 Branch의 최신 commit으로 branch base를 옮기는 작업, 즉 베이스를 다시 설정하는 작업이다.
rebase 명령어를 실행하면 vi 에디터가 열린다.
이때 i를 누르면 insert 모드로 설정되어 글을 적고 지울 수 있다.
pick {hash} {커밋 메시지}
다음과 같은 commit 목록에서 pick을 e 또는 edit으로 변경한다.
그리고 Esc
-> :wq
-> Enter
를 순서대로 진행하면 저장된다.
저장하고 나오게 되면 rebase 진행 모드를 시작하게 된다.
이때 나는 author를 수정해야 하므로 다음과 같은 명령어를 입력했다.
git commit --amend --author="이름<이메일>" // author 변경
rebase 모드에서 위의 명령어를 입력하면 수정 사항이 반영된다.
이와 마찬가지로 commit을 --amend
로 수정할 수 있으니 이와 관련된 블로그를 참고하길 바란다.
여러 개의 commit을 수정해야 했어서, 수정이 완료되면 다음 파일로 넘어가서 동일한 작업을 반복해서 진행했다.
git rebase --continue //rebase 작업 종료 후 다음 파일로 넘어가기
모든 author 수정이 완료되면 로컬 저장소에서 원격 저장소로 push하면 되는데, 그냥 push하게 될 경우 충돌이 발생했다는 이유로 진행되지 않는다.
그래서 -f
옵션을 이용해 강제로 push 해야 한다.
git push -f origin 브런치
이제 🌱잔디🌱가 제대로 심어진 것을 확인할 수 있다 !
기존에 main에서 push 했었는데, 혹시나 main의 파일이 잘못될까봐 develop 브랜치를 생성해서 거기서 rebase를 진행했다. 이 과정에서 원격 저장소와 로컬 저장소에서 각기 다른 브런치를 생성, 삭제 했었다.
이후 main -> delete, develop -> main로 이름을 수정한 뒤 강제로 push해 잔디 심기에는 성공했다.
하지만 로컬과 원격 저장소의 branch가 일치하지 않아 동기화가 이루어지지 않았다. (vs code 사용 중이었기 때문에 동기화가 이루어져야 했다.. )
로컬과 원격 저장소의 브런치를 main만 유지하고 나머지를 모두 삭제했다. 그리고 저장소 연결 정보를 끊고 다시 연결함으로써 두 저장소에서의 브런치를 일치시켜 문제를 해결했다.
git remote remove origin // 삭제
git remote add origin https://github.com/프로젝트.git //추가
commit을 수정하는 것은 권장하지 않는다.
그러니 commit은 신중히, 그리고 push는 더 신중히 하도록 하자 ☃️