激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

2020-08-29 16:54CodeMissing 編程技術

這篇文章主要介紹了解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

解決這個問題并沒有特別的(刪除提交歷史中某個文件,然后重新push),但是由于開始的使用失誤,中間有使用git rebasegit reset命令處理,所以特此記錄下

大文件無法push到遠程倉庫

問題

首先,故事(事故)的起因是這樣的。

某次git push(類似測試使用,沒有分支)到遠程倉庫時發生如下無法提交大文件的報錯(大文件是一個pdf文件)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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'

根據提示,如下查看大文件是哪個

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

commit的大文件無法push到遠程庫解決辦法

首先說一下解決辦法,需要修改提交歷史,刪除已提交到本地倉庫的大文件的提交記錄,

從commit的提交歷史中刪除指定文件的命令為git filter-branch --tree-filter 'rm -f 文件名' head

如下,刪除大文件

?
1
2
3
$ 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

執行刪除成功會返回ref 'refs/heads/master' was rewritten提示,如果返回unchanged則表示沒有任何更改。

如果文件路徑包含空格需要用引號將刪除文件路徑包含起來。

然后重新push推送成功。

整體操作如下:

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

git filter-branch命令:

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

參考自git誤commit大文件導致不能push問題解決

git commit后的回滾

撤銷已經提交的commit有兩種方法:

使用 git reset --hard head^

使用 git rebase -i head~n

git reset --hard 丟棄最新的提交

代碼提交后,需求發生變化導致之前提交的已經不合適,或者 代碼提交后發現有嚴重bug,需要回滾可是使用這個命令:

git reset --hard head^

1,head^ 表示 最新提交head位置往回數一個提交, 幾個 ^ 就往回數幾個提交;

2,head~n 表示 最新提交head位置往回數n個提交

reset 命令只能回滾最新的提交。如果只想刪除指定的某個提交,而保留最新的一次或兩次commit,reset就無法做到了。

reset命令 git 刪除某次指定的提交

git rebase -i 丟棄指定提交

如果想撤銷中間某次commit的情況,可以使用如下的命令:

git rebase -i head~2(列出最新的兩次提交,然后決定對應提交的操作)

rebase -irebase --interactive 的縮寫;

git rebase -i 不僅可以刪除commit, 還可以修改commit。 具體的可以查看rebase中提示的參數

如下執行git rebase查看命令參數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ 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

常用的如下:

  • edit: 使用本次提交,在rebase到這次提交時候,會暫停下來等待修正
  • pick:使用本次提交,不操作修改
  • drop:刪除這次提交

如下,修改查看最近3次的提交,然后刪除(drop)倒數第三次commit,保存退出即可將倒數第三次commit中提交的所有內容刪除

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

回滾最新的提交 :git resetgit rebase 命令都可以

回滾中間某次提交: git rebase 可以, git reset 不可以

如果提交已經同步到遠程倉庫,需要使用git push origin -f branch(分支名) 來將回滾也同步到遠程倉庫(master 分支謹慎使用 -f)

主要參考自

git rebase

git rebase執行失敗后的退出

像上面,執行git rebase有可能導致失敗,具體表現為bash中的倉庫標識變為了(master|rebase 1/10)(m/n視reabse編輯內容而定)

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

解決辦法是:執行git rebase --abort即可退出這個錯誤,回退到當前分支中,且數據和文件也都能恢復。

不小心git rebase后出現(master|rebase 1/10)的解決辦法

git rebase成功后的回退

上面講的是git rebase失敗后的退出(,或回退),如果成功刪除了某次commit,導致最終一些文件或數據丟失,如何恢復呢?

不要輕易使用 git rebase -i head 刪除某次提交

git rebase -i head~2中刪除某次提交的話,這次提交的所有更改和新增文件會全部取消,覆蓋本地工作目錄中的文件,也就是刪除的這次提交和本次提交的上一次提交中間的所有更改都會取消,即使pick了刪除提交的下一次提交,也無法保留(保留到最新提交時所有文件和文件夾的狀態)

可以使用git reset --hard id命令,直接恢復commit到指定的提交時刻。

git reflog查看git提交記錄

解決使用commit提交大文件無法推送到遠程庫問題及git rebase使用詳解

如上,可以直接看到需要恢復到的commit id是多少。比如恢復到id為71add05的時刻,執行git reset --hard 71add05等待恢復。本地倉庫和文件就能恢復到指定提交時刻。

恢復指定的某次commit成功。

 

 

刪除文件后需要執行git add -agit rm <file>,將刪除添加到暫存區, 如果執行 git add. 是不行的,區別如下:

git add -a 保存所有的修改(包括刪除的文件、新增文件、已有文件的修改變更)git add . 保存新的添加和修改,但是不包括刪除git add -u 保存修改和刪除,但是不包括新建文件。

到此這篇關于記一次使用commit提交大文件無法推送到遠程庫解決問題過程及git rebase使用的文章就介紹到這了,更多相關commit提交大文件git rebase使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/codemissing/p/git_push_bigfile_issue.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av电影院在线观看 | www视频免费在线观看 | 国产精品视频免费网站 | 香蕉视频网站在线观看 | 午夜视频大全 | 中文字幕在线资源 | 国产一级淫片在线观看 | 日本在线不卡一区二区 | 欧美亚洲一区二区三区四区 | 乱淫67194 | 91成人精品 | 性欧美视频在线观看 | 久久久久久久亚洲视频 | h视频免费看 | 一级做a爱片久久毛片a高清 | 毛片网站视频 | avlululu| 欧美色另类 | 国产成人精品一区二区三区电影 | av电影在线观看网站 | 嗯~啊~弄嗯~啊h高潮视频 | 99精品视频在线看 | 全黄裸片武则天一级第4季 九色p | 高清中文字幕在线 | 深夜福利视频绿巨人视频在线观看 | 性色tv| 国产papa | 双性精h调教灌尿打屁股的文案 | 欧美日韩经典在线 | 亚洲影院久久久av天天蜜桃臀 | 亚洲va久久久噜噜噜久久男同 | 午夜精品在线视频 | 国产永久免费观看 | 成人爽a毛片免费啪啪红桃视频 | 中文字幕在线播放视频 | 国产一级免费不卡 | 日韩中文字幕一区二区三区 | 亚洲午夜在线观看 | 国产亚洲综合一区二区 | 一级影片在线观看 | 亚洲精品 在线播放 |