티스토리 뷰

나는 영상 제작에 취미를 가지고 있다.

촬영한 영상들을 한 페이지에 나타낼 수 있는 페이지를 만들 계획을 갖고 있었고, 새해가 된 기념으로 이번 기회에 프로젝트를 만들기 시작했다.

 

우선, 기본적인 구현 목록은 다음처럼 계획하였다.

 

  • 각 카테고리 별 동영상 출력하기
  • 각 동영상을 이미지 버튼으로 실행할 수 있도록 구현하기
  • 해당 동영상의 이미지 버튼을 클릭하면 모달창으로 동영상 실행하기

 

위의 구현 내용을 테스트 이미지와 동영상 파일을 활용해 최적화를 고려하지 않은 채 구현까지는 성공했다.

구현을 성공했으니, 최적화 전에 실제로 사용할 이미지 파일들과 동영상 파일들을 사용해야 했다.

 

문제 원인

모든 파일들을 용량 최적화를 진행하고 나서, 프로젝트에 추가했다.

이미지 파일들은 동영상보다 용량이 작았기 때문에 프로젝트에 추가하고 깃허브에 'Commit&Push'까지 할 수 있었다.

그러나, 동영상 파일들을 프로젝트에 추가하는 것까지는 문제가 없었으나, 깃허브에 'Commit&Push' 한 순간 문제가 발생했다.

 

그 문제는 바로, 깃허브에 용량이 큰 파일을 'Push'할 수 없는 것이었다.

Enumerating objects: 97, done.
Counting objects: 100% (97/97), done.
Delta compression using up to 4 threads
Compressing objects: 100% (75/75), done.
Writing objects: 100% (81/81), 653.40 MiB | 11.88 MiB/s, done.
Total 81 (delta 35), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (35/35), completed with 10 local objects.
remote: warning: File Project/creator_portfolio/public/videos/travel/mp4/laos.mp4 is 65.53 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: error: Trace: 6c257d4cb2df0fba927ec85b015993bb016861e6bb57783f4fdb15b958290276
remote: error: See https://gh.io/lfs for more information.
remote: error: File Project/creator_portfolio/public/videos/travel/mp4/europe.mp4 is 150.81 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File Project/creator_portfolio/public/videos/travel/mp4/kaohsiung.mp4 is 198.31 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File Project/creator_portfolio/public/videos/travel/webm/laos.webm is 188.14 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://github.com/Hschan2/LearnJavascript.git
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/Hschan2/LearnJavascript.git'

 

동영상 파일을 프로젝트에 직접 넣는 방법은 용량이 크기 때문에 좋은 방법이 아니라는 것은 알고 있었다.

그렇지만, 무료로 사용할 수 있는 스토리지를 찾지 못했고, 동영상 파일들도 생각보다 용량이 크지 않았기 때문에 프로젝트에 직접 넣어 사용하는 것을 선택했다.

 

가능할 것이라고 생각했지만. 위의 문제가 발생했다.

더 큰 문제는 해당 레포지토리에 더 이상 'Push'할 수 없게 된 것이다.

그 이유는, 히스토리에 위의 동영상 파일들을 넣으려고 한 시도가 아직 남아 있었기 때문이다.

 

아직 Git에 대해 이해도가 부족하기 때문에 이 문제를 어떻게 해결해야 할 지 고민이 많았다.

이전 커밋들을 취소해보고 다시 푸시를 해도 여전히 같은 문제가 발생하고 있었다.

 

문제 해결 방법 찾기

그러다 문득, 'Commit ID' 값으로 어떤 행동을 할 수 있었다는 것을 떠올리게 됐다.

그렇지만, 정확하게 어떤 행동인지는 기억나지 않아 ChatGPT에 질문을 해봤다.

 

 

그러자, ChatGPT가 다음과 같은 답변을 해줬다.

 

일단, 'git revert'는 새로운 커밋을 생성한다고 하여 찾고 있는 방법이 아니라고 판단했다.

그래서 아래의 'git reset'을 활용해보기로 했다. 물론 이 방법이 모든 프로젝트에 써도 되는 방법은 아닌 것 같았지만, 이번 프로젝트는 개인적이고, 아주 작았기 때문에 활용해봐도 괜찮겠다고 판단했다.

 

문제 해결 방법 시도

내가 커밋한 목록들의 아이디를 찾는 방법은 두 가지가 있었다.

 

첫 번째는 'git log' 명령어를 입력해 원하는 커밋의 아이디를 찾을 수 있었고, 두 번째는 'VS Code'에서 'Source Control' 탭에서 반 시계 모양의 아이콘을 클릭해보면 커밋 히스토리를 확인할 수 있었다.

 

명령어를 입력해 확인하는 방법은 아이디가 길게 알려주기 때문에, 나는 두 번째 방법으로 히스토리를 확인해 간소화된 길이의 아이디를 활용하기로 했다.

 

'git reset' 명령어를 입력할 때, 완전히 취소하기 싶은 커밋이 무엇인지부터 찾아야 한다.

이 때, 알고 있어야 하는 부분은 해당 커밋 아이디의 다음 커밋부터 모두 초기화하기 때문에 이 부분을 고려한 채 사용해야 한다.

 

git reset --hard 43b...

 

 

나는 위의 명령어를 입력하여 문제가 되는 부분들의 커밋들을 모두 초기화했다.

초기화가 진행되고 나서, 히스토리를 확인해보니 문제가 되는 부분들이 모두 삭제가 된 것을 확인할 수 있었다.

 

히스토리가 모두 삭제가 되었으니, 다시 새로운 커밋을 하고 푸시를 할 수 있는지 확인하였다.

테스트 파일을 생성하고 커밋을 진행한 뒤, 푸시를 했더니 에러 메시지가 나타났다.

 

그 문제는 바로 푸시하기 전에 'Pull' 먼저 하라는 메시지였다.

메시지대로 'Pull'을 진행하고 나서 다시 푸시를 했더니, 성공적으로 푸시된 것을 확인할 수 있었다.

 

알아야 할 정보

이번 'git reset' 명령어는 말 그대로 초기화하는 것이다.

이번처럼 특정 커밋 아이디 이후부터 모두 초기화하기 때문에 문제가 없다면 사용해도 되지만, 최근 커밋이 삭제되길 원하지 않다면 다른 방법을 생각해봐야 한다.

 

만약, 초기화한 부분을 다시 복구하고 싶다면 'git reflog' 명령어를 활용하여 복구할 수 있다.

초기화한 부분을 다시 복구가 필요하게 되는 경우가 발생할 수 있다.

 

바로, 명령어를 실행한 프로젝트 경로 폴더에서 취소하고자 하는 커밋 이후에 폴더 생성이나, 수정된 부분이 있다면 초기화가 진행될 시, 그 폴더가 삭제되거나 수정된 부분이 이전으로 되돌아가기 때문이다.

 

쉽게 말해, 'D:\JavaScript\Project' 경로에 A 폴더, B 폴더가 있다고 가정하자.

여기서 B 폴더는 내가 취소하고자 하는 커밋 이후에 생성되었다고 가정할 때, 'git reset'을 진행하면 B 폴더가 삭제된다.

그렇기 때문에 이 부분을 고려하여 사용해야 한다.

 

 

[GIT] git reset 취소하기

git reset을 하다 보면 reset 하기 이전으로 돌아가야 할 경우가 생깁니다. 그럴 경우 먼저, git reflog를 입력하여 이전 이력들을 조회합니다. git reflog git reflog 명령어에서 reflog는 reference log를 의미합

hajoung56.tistory.com

 

 

'프로그래밍 지식 > Git' 카테고리의 다른 글

[Git 협업] Pull request & Conflict  (0) 2023.05.30
[Git 협업] Pull Request  (1) 2023.05.30
[Git 협업] Conflict  (0) 2023.05.30
[Git 협업] Co-working  (0) 2023.05.30
[Git 협업] Merge into current branch  (0) 2023.05.30