之后找到一种较为暴力的解决方法: git stash 在网上找到关于这段命令(git 储藏)的使用场景: 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。...使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码...其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的...,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。...解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
,一个很好的解决方案是使用git filter-branch。...所以对这些文件使用 "delta off",以避免不必要的delta压缩工作作为重新打包的一部分。...这种技术可以通过明确说明你要填充哪些文件夹来保持工作目录的干净。不幸的是,它并不影响整个本地仓库的大小,但如果你有一棵巨大的文件夹树,那就很有帮助。 涉及的命令是什么?下面是一个例子。...echo src/ ' .git/info/sparse-checkout 按照规定读取树。 完成上述工作后,你可以回去使用正常的 git 命令,但你的工作目录将只包含你上面指定的文件夹。...image.png Git LFS是无缝的:在你的工作副本中,你将只看到你的实际文件内容。这意味着你可以在不改变现有的Git工作流程的情况下使用Git LFS;你只需、编辑、、和正常工作。
的目录过大,从git进行版本控制底层存储出发,简要分析Git目录过大的原因,以及如何处理 2、Git存储原理 2.1 目录结构 使用版本控制的人都会知道,不管是svn还是更为流行的git,整个工程目录下...HEAD:表示当前本地签出的分支 hooks:git钩子目录,关于钩子的使用可以参考我之前的文章 利用Git钩子实现代码发布 index: 存储缓冲区GitExtensions中的stage...4个部分: 工作目录快照名称(一个哈希值) 一条评论/注释 提交者信息 父提交的哈希值 每一个提交Commit相当于一个Patch应用在之前的项目上,借此一个项目可以回到任何一次提交时的文件状态...`" --tag-name-filter cat -- --all # 或者直接删除目录下的所有文件 # git filter-branch --force --index-filter 'git rm...这样大文件既不会污染我们的 .git 目录,也可以让我们更方便的使用,这里不多做原理展开, 简单来说操作方法如下 # 1.开启lfs功能 # git lfs install # 2.追踪所有后缀名为“.
-m [message] #提交工作区自上次 commit 之后的变化,直接到仓库区 $ git commit -a #提交时显示所有 diff 信息 $ git commit -v #使用一次新的 commit...$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD # 使一个子目录作为新的根目录:假设已经从另一个源代码控制系统中导入,并且有几个没意义的子目录...如果想要让 trunk 子目录作为每一个提交的新的项目根目录,filter-branch 也可以帮助你那么做,再在新项目根目录是 trunk 子目录且 Git 会自动移除所有不影响子目录的提交。...$ git filter-branch --subdirectory-filter trunk HEAD # 在开始工作时忘记运行 git config 来设置你的名字与邮箱地址,或者你想要开源一个项目...需要小心的是只修改你自己的邮箱地址,所以使用 --commit-filter 来修改: $ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL
1.5 分离某次提交 变基命令还能分离提交,这里不描述,详情查看后面的参考链接 终极手段 git还提供了修改版本历史的“大杀器”——filter-branch,可以对整个版本历史中的每次提交进行修改,可用于删除误操作提交的密码等敏感信息...删除所有提交中的某个文件 git filter-branch --treefilter 'rm -f password.txt' HEAD 将新建的主目录作为所有提交的根目录 git filter-branch...回退到的指定提交以后的提交都会从提交日志上消失 注意:工作区和暂存区的内容都会被重置到指定提交的时候,如果不加--hard则只移动HEAD的指针,不影响工作区和暂存区的内容。... 这个方法可以对你的回退操作进行回退,因为这时候git log命令已经找不到历史提交的hash值了。...但是除了git revert可以直接push,其他都会对原有的版本历史修改,只能使用强制push git push -f 总结 git commit --amend
这件事导致公司对所有员工进行了一次数据安全的培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致的。...config --global -l 特定仓库 如果你只想修改某个特定仓库的用户信息,可以在特定仓库的根目录下进行如下操作,Git会将设置得用户名和邮箱仅应用于当前仓库。...git push origin master 批量修改 Git官网提供了很多种修改提交记录信息的方法,这里主要介绍下filter-branch,它可以通过脚本的方式批量修改历史提交记录信息。...全局修改邮箱地址; 从每一个提交中移除一个文件; 使一个子目录做为新的根目录 用法 历史提交记录中有很多用户名xiaofu提交的记录,现在使用filter-branch批量将他们改写成程序员小富。...还有GitHub别留太多的个人信息,手机号邮箱就别放了,头像也别傻乎乎的放个自己大头贴,给自己留点回旋的余地。核心思工作和生活要隔离!!!
这个命令是 filter-branch,它可以改写历史中大量的提交,除非你的项目还没有公开并且其他人没有基于要改写的工作的提交做的工作,你不应当使用它。 然而,它可以很有用。...为了从整个提交历史中移除一个叫做 passwords.txt 的文件,可以使用 --tree-filter 选项给 filter-branch: $ git filter-branch --tree-filter...如果想要让 trunk 子目录作为每一个提交的新的项目根目录,filter-branch 也可以帮助你那么做: $ git filter-branch --subdirectory-filter trunk...Git 会自动移除所有不影响子目录的提交。...需要小心的是只修改你自己的邮箱地址,所以你使用 --commit-filter: $ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL
要从仓库的历史记录中完全删除不需要的文件,你可以使用 git filter-branch命令或 BFG Repo-Cleaner。...使用 filter-branch 警告:如果你在暂存(stash)更改后运行 git filter-branch,你将无法使用其他暂存命令检索你的更改。...为了说明 git filter-branch 如何工作,我们将向你展示如何从仓库的历史记录中删除具有敏感数据的文件,并将其添加到 .gitignore 中以确保它不会被意外重新提交。 1....切换到仓库的工作目录。 cd YOUR-REPOSITORY 3....经过一段时间,你确信 git filter-branch 没有意外的副作用,你可以强制你的本地仓库中的所有对象被解除引用和垃圾收集,使用下面的命令(使用Git 1.8.5或更新的版本): git for-each-ref
这件事导致公司对所有员工进行了一次数据安全的培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致的。...--global -l特定仓库如果你只想修改某个特定仓库的用户信息,可以在特定仓库的根目录下进行如下操作,Git会将设置得用户名和邮箱仅应用于当前仓库。...git push origin master批量修改Git官网提供了很多种修改提交记录信息的方法,这里主要介绍下filter-branch,它可以通过脚本的方式批量修改历史提交记录信息。...全局修改邮箱地址;从每一个提交中移除一个文件;使一个子目录做为新的根目录用法历史提交记录中有很多用户名xiaofu提交的记录,现在使用filter-branch批量将他们改写成程序员小富。...git push origin masterGitHub工具管理GitHub项目,我推荐大家使用GitHub官方的Git客户端工具GitHub Desktop,这个工具专门用来管理GitHub仓库,洁面简洁使用也很方便
修改最近一次提交的邮箱# git commit --amend --author="NewAuthor " 批量修改邮箱# 使用该脚本,替换其中 [Your...Old Email] [Your New Author Name] [Your New Email] 之后在 git 目录中执行即可。.../bin/sh git filter-branch --env-filter ' an="$GIT_AUTHOR_NAME" am="$GIT_AUTHOR_EMAIL" cn="$GIT_COMMITTER_NAME.../heads/master # 或 $ git filter-branch -f --tree-filter -f 'rm -f test' -- --all 参考文献# git修改提交作者和邮箱 git...修改历史提交的用户名和邮箱 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
本文主要介绍如何使用 git filter-branch 命令删除 Git 仓库中的敏感文件及其历史记录。...背景 因为我开一个新的项目的时候习惯先使用私有仓库,当完善的差不多的时候再转为公开,私有库就随便了些,可能存在一些不合适公开的一些信息,所以需要在转为公开仓库前检查删除一些内容。...2.3 运行git filter-branch 进入仓库目录,使用 git filter-branch 命令删除敏感文件及其历史记录。...git filter-branch --force --index-filter "git rm --cached --ignore-unmatch config/your-sensitive-file.json...如果你是一个人使用,那就无所谓了。 3. 结论 本文介绍了如何使用 git filter-branch 命令手动删除Git仓库中的敏感文件及其历史记录。
步骤 确认本地全局邮箱/用户名 查看仓库的历史提交信息 批量修改历史记录中的信息 将修改结果推送到远程 1.确认本地全局邮箱/用户名 使用下面两个命令查看 git 在本地的全局邮箱和用户名。...2.查看仓库的历史提交信息 git clone 你要修改的仓库,进入该仓库目录,打开 git bash 界面,执行 git log 命令查看历史提交信息(重点关注 Author)。...git filter-branch -f --env-filter ' OLD_EMAIL="原来的邮箱" CORRECT_NAME="现在的名字" CORRECT_EMAIL="现在的邮箱" if [...Linux/Mac下可以写个脚本 在项目根目录下创建git-email.sh,写入下面这段代码: #!.../bin/sh git filter-branch --env-filter ' OLD_EMAIL="原来的邮箱" CORRECT_NAME="现在的名字" CORRECT_EMAIL="现在的邮箱
修改最近一次提交的邮箱# git commit --amend --author="NewAuthor " 批量修改邮箱# 以下脚本本人已使用多次,亲测没问题...使用该脚本,替换其中 [Your Old Email] [Your New Author Name] [Your New Email] 之后在 git 目录中执行即可。 #!.../bin/sh git filter-branch --env-filter ' an="$GIT_AUTHOR_NAME" am="$GIT_AUTHOR_EMAIL" cn="$GIT_COMMITTER_NAME.../heads/master # 或 $ git filter-branch -f --tree-filter -f 'rm -f test' -- --all 参考文献# git修改提交作者和邮箱 git...修改历史提交的用户名和邮箱 设置 Git 账户及邮箱 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
本文作者:0x584A(来自信安之路作者团队) 本章教大家如何使用 GIT 进行一些关于已提交历史的修改、删除操作。...比如碰到下列情况时,如何使用 GIT 实现想要的操作: 1、代码或日志中的注释误提交了,怎么修改它? 2、我想丢弃指定的提交历史可不可以? 3、在提交很久历史记录中存在敏感信息,如何修改或删除它?...阅读本文章时默认大家都具备使用 GIT 进行基本操作的水平。...核弹级选项: filter-branch 官方文档上的实例:要从整个历史中删除一个名叫 password.txt 的文件,你可以在 filter-branch 上使用 --tree-filter 选项...-- --all passwords.txt 替换成实际要删除的文件或相对目录即可。
git filter-branch 1)前面两种修改的方式都是我们平时所熟悉的,使用频率比较高的删除某些文件或者提交记录的方式,但这些方式实际上都是生成了新的提交记录,并不会修改或者删除我们的提交历史...Git这么强大,肯定是存在可以永久删除历史记录的命令,找了一圈,发现确实有“后悔药”命令,那就是git filter-branch,通过以下命令,就可以永久删除你想要删除的任何文件: git filter-branch...不是说好了,可以永久删除记录的吗?摔!不是说好了,不能再通过commit id找回原来的大文件了吗?摔!别急,接下来就告诉你为什么。...-aggressive --prune=now 执行以上命令,就会发现.git目录变小了。...这是使用的错误推送命令: git push origin HEAD:refs/for/dev --force 推送到gerrit没效果,那么直接推送到git远程仓库呢? ?
以及.git目录中的object也有一份这个文件的记录。...即使使用git rm命令删除当前的cnn.model文件,.git目录中还是记录有这个大文件的记录,因此后面别人clone这个项目后,项目还是很大。...因此这里需要使用git filter-branch命令来删除.git目录中的文件记录: $ git filter-branch --index-filter 'git rm -r --cached -...通常来说,Git仓库的大文件都是.pack格式的,存放在这个目录中。...first commit 重写所有修改这个文件的提交 找到所有修改这个对象的commit后,我们找到最早的修改,然后使用git filter-branch命令来操作,具体如下: $ git filter-branch
无数的开发人员正在使用 Git 进行版本控制,但是许多开发人员对 Git 的工作方式并没有足够的了解。有些人甚至将 Git 和 Github 用作备份文件的工具。...这些做法导致 Git 仓库中的信息遭到泄露。每天都有数千个新的 API 或加密密钥从 GitHub 泄漏出去。[2] 我在信息安全领域工作了三年。...gitignore 是一个 Git 配置文件,它列出了不会被存入 Git 仓库的文件或目录。...将 master 设置为受限制的分支有助于我们执行代码审查的工作。 ? 快速并且正确地修复它 即使使用了上面提到的工具和方法,却仍然可能会发生错误。...git filter-branch 更快、更简单的用于删除敏感数据的替代方法。
通常,当我初始化一个新的仓库时,我将暂存所有文件,并使用初始提交消息进行提交。我使用git here一步就完成了(这对于开源工具重度爱好者,真的是福星,太爽了,谁用谁知道)。...还记得github pages 吗?...幸运的是,我们有别名(alias)。使用该命令的别名,你将获得非常漂亮的日志。 ?...带有多个参数的 filter-branch获取指定子文件夹的内容,并将其中的内容替换为该子文件夹的内容。...现在我们成功将 script 目录拆成了单独的项目。 ? 再来看 commit 记录,依旧保留了script 的相关commit记录,对于管理项目来说非常有帮助。
今天给大家介绍一个方法,可以批量替换 commit 记录中错误的用户信息。根据邮箱来寻找,可以修改为新的用户名和新的邮箱。适用于linux MacOS。操作步骤第一步cd到git项目目录下。...确保当前工作区干净。...执行以下代码,记得替换邮箱和名字:git filter-branch --env-filter 'OLD_EMAIL="错误的邮箱"CORRECT_NAME="新的用户名"CORRECT_EMAIL="...当你执行第一次「第一步」后,准备执行第二次「第一步」时,需要先执行下面的脚本,再开始下次批量替换:git filter-branch -f --tree-filter -f 'rm -f test' -...方案一:创建个人项目目录,针对个人目录配置git configgit 提供了这种能力,非常方便!同时支持Windows Mac Linux。
] 使用 archive命令可以创建整个或部分仓库的 tarball 和zip。...还记得github pages 吗?...幸运的是,我们有别名(alias)。使用该命令的别名,你将获得非常漂亮的日志。...带有多个参数的 filter-branch获取指定子文件夹的内容,并将其中的内容替换为该子文件夹的内容。...现在我们成功将 script 目录拆成了单独的项目。 再来看 commit 记录,依旧保留了script 的相关commit记录,对于管理项目来说非常有帮助。
领取专属 10元无门槛券
手把手带您无忧上云