Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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 repo中完全删除被推送到master的已删除文件_Git - Fatal编程技术网

在git repo中完全删除被推送到master的已删除文件

在git repo中完全删除被推送到master的已删除文件,git,Git,我下载了一个大的avi文件。我错误地将它下载到本地系统上的git回购。在做了一些提交之后,我意识到文件就在那里,并删除了该文件,而没有考虑稍后在服务器上推送到我的主服务器时会发生什么。不用说,git repo希望将已版本化的“已删除”文件推送到服务器 我好像记不起文件名了。我只知道它有一个.avi扩展名。我想要的是一些建议,关于如何在git回购中跟踪该文件,以及如何将其从推送到master中删除 谢谢, 马修想看看少了什么 git status 然后移除 git rm filename.avi

我下载了一个大的avi文件。我错误地将它下载到本地系统上的git回购。在做了一些提交之后,我意识到文件就在那里,并删除了该文件,而没有考虑稍后在服务器上推送到我的主服务器时会发生什么。不用说,git repo希望将已版本化的“已删除”文件推送到服务器

我好像记不起文件名了。我只知道它有一个.avi扩展名。我想要的是一些建议,关于如何在git回购中跟踪该文件,以及如何将其从推送到master中删除

谢谢,
马修想看看少了什么

git status
然后移除

git rm filename.avi

进行了更多搜索,发现如果您运行此命令,它将搜索所有已删除的文件并对其进行rm

git ls-files --deleted | xargs git rm

git筛选器分支以删除该文件。注意,从添加文件的点开始,您将有不同的SHA-1。

使用
git log--stat
来标识添加文件的提交的提交散列。
--stat
将帮助您查看每次提交时添加/删除的文件,并确定avi文件的路径。将其保存在
$FILENAME
中。然后

git filter-branch --index-filter 'git rm --cached --ignore-unmatch $FILENAME' HEAD
马特

你推过回购协议了吗?有人消费过吗?如果不是。。。更重要的是,如果你的历史仍然是你自己的,那么你需要重新设置基础来重写你的历史。比如说,我有一份回购协议,历史记录如下:

$ git log --summary --stat
001d888 Yet some more work (Fred - 71 seconds ago)

 file2.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
3f74e79 Doing some more work (Fred - 2 minutes ago)

 file1.txt |    1 +
 file3.txt |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)
8acc3d8 Adding some more files (Fred - 3 minutes ago)

 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
 create mode 100644 file2.txt
 create mode 100644 file3.txt
fb3a2e1 Just added a big ole file (Fred - 4 minutes ago)

 BigOleFile.blob |  Bin 0 -> 33214460 bytes
 1 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 BigOleFile.blob
6d0ab2b first commit (Fred - 8 minutes ago)

 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
假设BigOleFile.blob是您的大文件

要重写历史记录,请在要删除的历史记录之前获取提交的sha。在这种情况下,它是:

6d0ab2b

如果您的git日志非常大,请执行以下操作将其过滤,并为您提供匹配的上下文:

git log --summary --stat |  grep avi --context=10
现在,使用交互式选项重新设置历史记录的基础

$ git rebase --interactive 6d0ab2b
你会得到这样的结果:

pick fb3a2e1 Just added a big ole file
pick 8acc3d8 Adding some more files
pick 3f74e79 Doing some more work
pick 001d888 Yet some more work

# Rebase 6d0ab2b..001d888 onto 6d0ab2b
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
再次查看git日志以确保:

$ git log --summary --shortstat
7c499bb Yet some more work (Fred - 12 minutes ago)

 1 files changed, 1 insertions(+), 0 deletions(-)
4dfa303 Doing some more work (Fred - 13 minutes ago)

 2 files changed, 2 insertions(+), 0 deletions(-)
2f27c1b Adding some more files (Fred - 14 minutes ago)

 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
 create mode 100644 file2.txt
 create mode 100644 file3.txt
6d0ab2b first commit (Fred - 19 minutes ago)

 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
之后推送至master:

$ git push origin master
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 751 bytes, done.
Total 8 (delta 2), reused 0 (delta 0)
To git@github.com:xxxxxxxxxxx/temp.git
   6d0ab2b..7c499bb  master -> master

正如你所看到的。。。文件都没了,再见

他想从历史中删除它,而不仅仅是在新的提交中删除它。这个文件很久以前就被删除了。是否有办法使用git查找特定类型的所有文件?我想完全禁止对文件进行版本控制。这仍然会使新克隆的最后一步太长,无法在此git存储库中供个人使用,或者您是否将提交推给了其他人?
$ git push origin master
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 751 bytes, done.
Total 8 (delta 2), reused 0 (delta 0)
To git@github.com:xxxxxxxxxxx/temp.git
   6d0ab2b..7c499bb  master -> master