最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年07月30日 11:17:26   作者:CodeMissing  
這篇文章主要介紹了解決使用commit提交大文件無法推送到遠(yuǎn)程庫問題及git rebase使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

大文件無法push到遠(yuǎn)程倉庫

問題

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

某次git push(類似測(cè)試使用,沒有分支)到遠(yuǎn)程倉庫時(shí)發(fā)生如下無法提交大文件的報(bào)錯(cuò)(大文件是一個(gè)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 'git@gitee.com:findmoon/xxxx.git'

根據(jù)提示,如下查看大文件是哪個(gè)

commit的大文件無法push到遠(yuǎn)程庫解決辦法

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

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

如下,刪除大文件

$ 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

執(zhí)行刪除成功會(huì)返回Ref 'refs/heads/master' was rewritten提示,如果返回unchanged則表示沒有任何更改。

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

然后重新push推送成功。

整體操作如下:

git filter-branch命令:

參考自git誤commit大文件導(dǎo)致不能push問題解決

git commit后的回滾

撤銷已經(jīng)提交的commit有兩種方法:

使用 git reset --hard HEAD^

使用 git rebase -i HEAD~n

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

代碼提交后,需求發(fā)生變化導(dǎo)致之前提交的已經(jīng)不合適,或者 代碼提交后發(fā)現(xiàn)有嚴(yán)重bug,需要回滾可是使用這個(gè)命令:

git reset --hard HEAD^

1,HEAD^ 表示 最新提交HEAD位置往回?cái)?shù)一個(gè)提交, 幾個(gè) ^ 就往回?cái)?shù)幾個(gè)提交;

2,HEAD~n 表示 最新提交HEAD位置往回?cái)?shù)n個(gè)提交

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

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

git rebase -i 丟棄指定提交

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

git rebase -i HEAD~2(列出最新的兩次提交,然后決定對(duì)應(yīng)提交的操作)

rebase -irebase --interactive 的縮寫;

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

如下執(zhí)行git rebase查看命令參數(shù):

$ git rebase -i HEAD~2
pick 71add05 20200225同步
pick 45d4805 測(cè)試刪除中間某次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到這次提交時(shí)候,會(huì)暫停下來等待修正
  • pick:使用本次提交,不操作修改
  • drop:刪除這次提交

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

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

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

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

主要參考自Git回退代碼到某次commit的實(shí)現(xiàn)方法

git rebase

git rebase執(zhí)行失敗后的退出

像上面,執(zhí)行git rebase有可能導(dǎo)致失敗,具體表現(xiàn)為bash中的倉庫標(biāo)識(shí)變?yōu)榱?code>(master|REBASE 1/10)(m/n視r(shí)eabse編輯內(nèi)容而定)

解決辦法是:執(zhí)行git rebase --abort即可退出這個(gè)錯(cuò)誤,回退到當(dāng)前分支中,且數(shù)據(jù)和文件也都能恢復(fù)。

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

git rebase成功后的回退

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

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

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

可以使用git reset --hard ID命令,直接恢復(fù)commit到指定的提交時(shí)刻。

git reflog查看git提交記錄

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

恢復(fù)指定的某次commit成功。

git rebase 成功之后如何撤銷

Git rebase命令使用實(shí)戰(zhàn)

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

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

到此這篇關(guān)于記一次使用commit提交大文件無法推送到遠(yuǎn)程庫解決問題過程及git rebase使用的文章就介紹到這了,更多相關(guān)commit提交大文件git rebase使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • windows下Idea使用git clone failed. Could not read from remote repository.

    windows下Idea使用git clone failed. Could not read from remote r

    這篇文章主要介紹了windows下Idea使用git clone failed. Could not read from remote repository.,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解HTTP協(xié)議簡介

    詳解HTTP協(xié)議簡介

    HTTP是訪問互聯(lián)網(wǎng)使用的核心通信協(xié)議,也是所有web應(yīng)用程序使用的通信協(xié)議。下面通過本文給大家介紹HTTP協(xié)議簡介的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2018-01-01
  • git安裝及idea配置的詳細(xì)教程

    git安裝及idea配置的詳細(xì)教程

    這篇文章主要介紹了git安裝及idea配置的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • git?push時(shí)卡住的解決方法(長時(shí)間不報(bào)錯(cuò)也不自動(dòng)退出)

    git?push時(shí)卡住的解決方法(長時(shí)間不報(bào)錯(cuò)也不自動(dòng)退出)

    這篇文章主要介紹了git?push時(shí)卡住(長時(shí)間不報(bào)錯(cuò)也不自動(dòng)退出),解決方法是通過設(shè)置ssh,用ssh來克隆代碼然后再進(jìn)行提交,本文給大家詳細(xì)解決方案,需要的朋友可以參考下
    2023-01-01
  • Chrome瀏覽器斷點(diǎn)調(diào)試技巧(非常詳細(xì)!)

    Chrome瀏覽器斷點(diǎn)調(diào)試技巧(非常詳細(xì)!)

    在我們?nèi)粘i_發(fā)中,常常利用chrome強(qiáng)大的控制臺(tái)Sources下面進(jìn)行代碼斷點(diǎn)調(diào)試,這篇文章主要給大家介紹了關(guān)于Chrome瀏覽器斷點(diǎn)調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • VSCode程序猿彩虹屁插件rainbow fart體驗(yàn)篇

    VSCode程序猿彩虹屁插件rainbow fart體驗(yàn)篇

    這篇文章主要介紹了VSCode程序猿彩虹屁插件rainbow fart體驗(yàn),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 微信支付 :curl出錯(cuò),錯(cuò)誤碼:60兩個(gè)問題的解決

    微信支付 :curl出錯(cuò),錯(cuò)誤碼:60兩個(gè)問題的解決

    這篇文章主要介紹了微信支付 出錯(cuò)的解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 解決IDEA中編輯HTML格式文件不自動(dòng)縮進(jìn)問題

    解決IDEA中編輯HTML格式文件不自動(dòng)縮進(jìn)問題

    這篇文章主要介紹了解決IDEA中編輯HTML格式文件不自動(dòng)縮進(jìn)問題,本文內(nèi)容簡短,解決方法給大家提出了,需要的朋友可以參考下
    2020-01-01
  • VSCode連接遠(yuǎn)程服務(wù)器調(diào)試代碼超詳細(xì)流程(圖文)

    VSCode連接遠(yuǎn)程服務(wù)器調(diào)試代碼超詳細(xì)流程(圖文)

    這篇文章主要給大家介紹了關(guān)于VSCode連接遠(yuǎn)程服務(wù)器調(diào)試代碼的超詳細(xì)流程,遠(yuǎn)程調(diào)試是為了解決在本機(jī)開發(fā)環(huán)境與線上不一致導(dǎo)致調(diào)試難、搭建繁瑣,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 手把手教你使用Git(圖文教程)

    手把手教你使用Git(圖文教程)

    這篇文章主要介紹了手把手教你使用Git(圖文教程),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10

最新評(píng)論

民勤县| 申扎县| 浦江县| 都江堰市| 鸡东县| 阳曲县| 道真| 隆昌县| 芒康县| 汕尾市| 东源县| 铁岭县| 长阳| 台湾省| 随州市| 金坛市| 临西县| 十堰市| 博客| 监利县| 六盘水市| 嫩江县| 碌曲县| 遂平县| 社会| 固镇县| 合江县| 疏勒县| 海盐县| 大方县| 体育| 新乡县| 镇远县| 凤翔县| 六安市| 紫金县| 昭觉县| 松桃| 井陉县| 郁南县| 岑溪市|