Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从某些git提交中删除文件,同时保持本地版本不变_Git_Github_Git Lfs - Fatal编程技术网

从某些git提交中删除文件,同时保持本地版本不变

从某些git提交中删除文件,同时保持本地版本不变,git,github,git-lfs,Git,Github,Git Lfs,情况如下:我们的git存储库中有一个文件a.out,它随着时间的推移而增长,现在变得太大,无法推送到github。我是在规模过大后才意识到后几次承诺的,所以回购协议是这样的: COMMIT5(头)包含A.out超过100mb COMMIT4不包含A.out COMMIT3不包含超过100mb的A.out COMMIT2(起点/终点)不包含A.out COMMIT1不包含A.out不超过100mb COMMIT2是我推送到github的最后一次提交,现在我无法在COMMIT5之后推送 如何从提

情况如下:我们的git存储库中有一个文件
a.out
,它随着时间的推移而增长,现在变得太大,无法推送到github。我是在规模过大后才意识到后几次承诺的,所以回购协议是这样的:

  • COMMIT5(头)包含
    A.out
    超过100mb
  • COMMIT4不包含
    A.out
  • COMMIT3不包含超过100mb的
    A.out
  • COMMIT2(起点/终点)不包含
    A.out
  • COMMIT1不包含
    A.out
    不超过100mb
COMMIT2是我推送到github的最后一次提交,现在我无法在COMMIT5之后推送

如何从提交3和提交4中删除
A.out
,同时在本地保持它的最新>100mb版本(并且未从git跟踪)


编辑:这个问题源于github的一个大文件问题,这个具体案例可能可以按照(由@phd指出)中的解释进行处理。但是,如上所述的问题当然与涉及的文件大小无关。在我的特定情况下,git版本太旧,目前无法支持git lfs,但我不想等到服务器版本更新后再使用。

git rebase-I HEAD~4//重新设置过去4次提交的git历史记录

它将向您显示这4个提交的列表。如果您想更改远程的历史记录,您可以选择编辑commit3甚至commit2(不推荐)

当您重新设置提交3的基期时,只需将A.out添加到.gitignore即可。 添加它以提交并继续重新设置基础


如果您以前没有使用git rebase,我建议您先熟悉它

git rebase-I HEAD~4//重新设置过去4次提交的git历史记录

它将向您显示这4个提交的列表。如果您想更改远程的历史记录,您可以选择编辑commit3甚至commit2(不推荐)

当您重新设置提交3的基期时,只需将A.out添加到.gitignore即可。 添加它以提交并继续重新设置基础


如果您以前没有使用git rebase,我建议您先熟悉它

我假设您当前所在的分支的名称为“master”

  • 将a.out复制到git repo之外的文件夹中
  • git签出-b新分行委员会2
  • 将a.out添加到.gitignore,然后运行
    git rm a.out
    。提交这些更改
  • git签出主机
  • git重新设置新分行的基础-i
  • 这会导致一些重基冲突,因为重基的提交(从主提交)包含.out,而重基的分支(新分支)将.out作为未跟踪的文件

    在每一个提到a.out的冲突中,运行
    git rm a.out
    ,然后
    git rebase--继续执行
    ,以继续执行rebase


    在这个过程结束时,您可以使用
    git branch-d new branch
    安全地删除新分支,并将a.out从git回购协议外部复制回来。

    我假设您当前所在的分支的名称为“master”

  • 将a.out复制到git repo之外的文件夹中
  • git签出-b新分行委员会2
  • 将a.out添加到.gitignore,然后运行
    git rm a.out
    。提交这些更改
  • git签出主机
  • git重新设置新分行的基础-i
  • 这会导致一些重基冲突,因为重基的提交(从主提交)包含.out,而重基的分支(新分支)将.out作为未跟踪的文件

    在每一个提到a.out的冲突中,运行
    git rm a.out
    ,然后
    git rebase--继续执行
    ,以继续执行rebase


    在此过程结束时,您可以使用
    git branch-d new branch
    安全地删除新分支,并将a.out从git repo外部复制回来。

    可能重复@phd:问题源于一个大文件,此特定情况可能会如链接中所述得到解决。但是重定基址当然完全独立于所涉及的文件大小。此外,我们的服务器安装了git版本1.7.10.4,而根据,git lfs需要版本>=1.8.2。可能是@phd的副本:这个问题源于一个大文件,这个具体案例可能会如链接中所述得到解决。但是重定基址当然完全独立于所涉及的文件大小。此外,我们的服务器安装了git版本1.7.10.4,而根据,git lfs需要版本>=1.8.2。