commt 를 사용 하여 큰 파일 을 원 격 라 이브 러 리 로 보 낼 수 없 는 문제 해결 및 git rebase 사용 에 대한 자세 한 설명

이 문 제 를 해결 하 는 것 은 특별한 것 이 아 닙 니 다.
큰 파일 을 원 격 창고 로 push 할 수 없습니다.
문제.
우선 이야기(사고)의 원인 은 이렇다.
한 번git rebase(유사 테스트 사용,분기 없 음)원 격 창고 에 갔 을 때 다음 과 같은 큰 파일 을 제출 할 수 없 는 오류 가 발생 했 습 니 다(큰 파일 은 pdf 파일 입 니 다)

$ git push
Enumerating objects: 204, done.
Counting objects: 100% (204/204), done.
Delta compression using up to 4 threads
Compressing objects: 100% (183/183), done.
Writing objects: 100% (187/187), 419.00 MiB | 2.21 MiB/s, done.
Total 187 (delta 21), reused 0 (delta 0)
remote: Resolving deltas: 100% (21/21), completed with 12 local objects.
remote: Powered by GITEE.COM [GNK-3.8]
remote: error: File: db501995ac30070d50bdc115a7708f9ba84332d3 403.57 MB, exceeds 100.00 MB.
remote: Use command below to see the filename:
remote: git rev-list --objects --all | grep db501995ac30070d50bdc115a7708f9ba84332d3
remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232)
To gitee.com:findmoon/xxxx.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:findmoon/xxxx.git'
힌트 에 따라 다음 과 같이 큰 파일 이 무엇 인지 봅 니 다.

commt 의 큰 파일 을 원 격 라 이브 러 리 로 푸 시 할 수 없습니다.
우선 해결 방법 을 말씀 드 리 겠 습 니 다.제출 역 사 를 수정 하고 로 컬 창고 에 제출 된 큰 파일 의 제출 기록 을 삭제 해 야 합 니 다.
commt 의 제출 기록 에서 지정 한 파일 을 삭제 하 라 는 명령 은git reset다음,큰 파일 삭제

$ git filter-branch --tree-filter 'rm -f "Electron/pdf/677969 xxxx xxx.pdf"' HEAD
Rewrite d1244f8fbc1f08b473bd498c023b09bd8ac3246b (12/12) (156 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten
삭제 에 성공 하면git push알림 을 되 돌려 주 고,되 돌아 오 면git filter-branch --tree-filter 'rm -f ' HEAD변경 사항 이 없 음 을 표시 합 니 다.
파일 경로 에 빈 칸 이 포함 되 어 있 으 면 삭제 파일 경 로 를 따옴표 로 포함 시 켜 야 합 니 다.
그리고 다시 push 푸 시 성공.
전체 작업 은 다음 과 같 습 니 다.
Ref 'refs/heads/master' was rewritten명령:

참조unchanged제출 한 commt 를 취소 하 는 방법 은 두 가지 가 있 습 니 다.
사용git filter-branch사용git commit git reset--hard 최신 제출 버 리 기
코드 제출 후 수요 변화 로 인해 이전에 제출 한 것 이 적합 하지 않 거나 코드 제출 후 심각 한 bug 가 발견 되 었 습 니 다.스크롤 백 이 필요 하지만 이 명령 을 사용 하 십시오.git reset --hard HEAD^1.git rebase -i HEAD~n최신 제출 HEAD 위치 에서 하나 씩 제출 하고 몇 개^는 몇 개 씩 제출 하 는 것 을 나타 낸다.
2,git reset --hard HEAD^최근 제출 HEAD 위치 회수 n 개 제출HEAD^명령 은 최신 제출 만 되 돌 릴 수 있 습 니 다.지정 한 제출 만 삭제 하고 최신 커밋 을 한 번 또는 두 번 보류 하려 면HEAD~n할 수 없습니다.reset명령git 오류 commit 큰 파일 로 인해 push 문 제 를 해결 할 수 없습니다.
git rebase-i 지정 한 제출 버 리 기
중간 커밋 을 취소 하려 면 다음 명령 을 사용 하 십시오.reset(최신 두 번 의 제출 을 열거 한 다음 에 제출 할 작업 을 결정 합 니 다)resetgit rebase -i HEAD~2의 줄 임 말이다.rebase -icommt 를 삭제 할 수 있 을 뿐만 아니 라 commt 도 수정 할 수 있다.구체 적 으로rebase --interactive에서 제시 한 매개 변 수 를 볼 수 있 습 니 다.
다음 실행git rebase -i명령 인자 보기:

$ git rebase -i HEAD~2
pick 71add05 20200225  
pick 45d4805         commit

# Rebase 36b460a..45d4805 onto 36b460a (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
자주 사용 하 는 것 은 다음 과 같다.
  • rebase
  • git rebase
  • edit: , rebase ,
  • 다음 과 같이 최근 세 번 째 제출 을 보고 마지막 세 번 째 commt 를 삭제 합 니 다.종료 저장 하면 마지막 세 번 째 commt 에서 제출 한 모든 내용 을 삭제 할 수 있 습 니 다.

    스크롤 백 최신 제출:pick: , 명령 과drop: 명령 모두 가능 합 니 다.
    스크롤 백 중간 에 제출:git reset네,git rebase안 됩 니 다.
    원 격 창고 에 동기 화 되 었 다 면 스크롤 백 도 원 격 창고 에 동기 화(master 분기 신중 사용-f)를 사용 해 야 합 니 다.
    주요 참조git 지정 한 제출 삭제git rebase git reset실행 실패 후 종료
    위 와 같이 실행git push origin -f branch( )은 실 패 를 초래 할 수 있 습 니 다.구체 적 으로 bash 에 있 는 창고 표 지 는git rebasegit rebase으로 바 뀌 었 습 니 다.

    해결 방법 은 실행git rebase하면 이 오 류 를 종료 하고 현재 분기 로 되 돌아 가 며 데이터 와 파일 도 복구 할 수 있 습 니 다.
    Git 코드 를 커밋 으로 되 돌려 주 는 방법 (master|REBASE 1/10)성공 후 후퇴
    위 에서 말 한 것 은m/n실패 한 후의 종료(또는 후퇴)입 니 다.만약 에 특정한 commt 를 성공 적 으로 삭제 하여 최종 파일 이나 데 이 터 를 잃 어 버 리 면 어떻게 회복 합 니까?
    어떤 제출 을 쉽게 사용 하지 마 세 요git rebase --abort.git rebase에서 한 번 의 제출 을 삭제 하면 이번에 제출 한 모든 변경 사항 과 추가 파일 은 모두 취소 되 고 로 컬 작업 디 렉 터 리 에 있 는 파일 을 덮어 씁 니 다.즉,삭 제 된 이번 제출 과 이번 제출 의 지난번 제출 중간 에 있 는 모든 변경 사항 은 취 소 됩 니 다.pick 이 제출 한 다음 제출 을 삭제 하 더 라 도저장 할 수 없습니다.(최신 제출 시 모든 파일 과 폴 더 의 상태 로 유지 합 니 다)git rebase명령 을 사용 하여 지정 한 제출 시간 까지 commt 를 직접 복원 할 수 있 습 니 다.git rebase -i HEADgit 제출 기록 보기

    위 와 같이 복구 해 야 할 commt ID 가 얼마 인지 직접 볼 수 있 습 니 다.예 를 들 어 Id 가git rebase -i HEAD~2로 회 복 될 때 까지 실행git reset --hard ID하고 회 복 될 때 까지 기다린다.로 컬 창고 와 파일 은 지정 한 제출 시간 으로 복원 할 수 있 습 니 다.
    지정 한 commt 를 복원 하 는 데 성 공 했 습 니 다.
    조심 하지 않 아 git rebase 후 나타 나 는(master|REBASE 1/10)해결 방법
    git rebase 성공 후 취소 방법
    파일 을 삭제 한 후 실행git reflog또는71add05해 야 합 니 다.삭 제 를 임시 저장 소 에 추가 합 니 다.실행git reset --hard 71add05하면 안 됩 니 다.차 이 는 다음 과 같 습 니 다.git add -A모든 수정 사항(삭 제 된 파일,추가 파일,기 존 파일 의 수정 변경 포함)git rm <file>을 저장 하고 새로운 추가 와 수정 사항 을 저장 하지만 삭제git add.는 수정 사항 과 삭 제 를 저장 하지만 새 파일 은 포함 되 지 않 습 니 다.
    커밋 을 사용 하여 큰 파일 을 원 격 라 이브 러 리 로 전송 할 수 없 는 문제 해결 과정 과 git rebase 를 기록 하 는 데 사용 되 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 커밋 은 큰 파일 git rebase 사용 내용 을 제출 합 니 다.이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기