多个补丁一个文件:

git format-patch -提交个数 --stdout -- drivers/staging/wlags49_h2/>../wlags49_patches/all.patch
每一个补丁一个文件:

git format-patch -提交个数 -o ../目录名称 -- drivers/staging/wlags49_h2/

数字设的足够大就是全部。。。

git format-patch for all the commits to a file - Stack Overflow

git: generate a single patch across multiple commits - Stack Overflow

剪裁仓库:

如何把GIT仓库的子目录独立成新仓库 – Sobird

By

sobird.me

2 min

View Original

背景

最近准备把公司某项目下的某目录的前端代码拆分出来,单独作为一个项目进行编译部署。那么,应该怎么操作GIT仓库才能把仓库的某个子目录独立出来,并保留之前的历史记录呢?

因为之前并不知道,有这样的操作可以实现将仓库的子目录独立成新仓库,我已经从头创建了一个新的仓库从零开始开发了,又如何并独立出来的仓库呢?

在网上查找到两种方法可以实现这样的操作,假如我有一个项目 project,它的项目目录结构如下:

/project/
----/test/
----|----test.md
----README.md

我想把该项目下的test目录独立成一个新的仓库。

使用git filter-branch

clone一个新的project仓库到~/test

git clone path/to/project ~/test

通常刚clone出来的~/test仓库本地只会有一个master分支,如果我们希望保存其他的分支,那就首先把它们创建出来:

cd ~/test
git branch -r br1 origin/br1
git branch -r br2 origin/br2

如果不希望保留其他的分支,就无需上操作。

删掉无用的origin

git remote rm origin

过滤所有历史提交,只保留对test子目录有影响的提交,并且把子目录设为该仓库的根目录

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter test -- --all

其中各参数的意义如下:

  • –tag-name-filter cat : 该参数控制我们要如何保存旧的tag,参数值为bash命令,cat表示原样输出。所以,如果你不关心tag,就不需要这个参数了;
  • –prune-empty: 删除空的(对子目录没有影响的)的提交
  • –subdirectory-filter elake: 指定子模块路径
  • –all: 该参数必须跟在–后面,表示对所有分支做操作,即对上一步创建的所有本地分支做操作。所以,如果你只想保存当前分支,就不需要这个参数了

该命令执行完毕后,查看当前目录结构就会发现里面已经是子目录的内容了, git log查看提交历史已经正常保存了。

至此,主要工作已经完成。但是当前的仓库中还保存着一些不需要的object,如果想清理这些来减小当前仓库的体积,可以进行如下操作:

git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now

使用git subtree

git 1.7.11之后使用 git subtree 指令可以很简单地把GIT仓库下某个目录的 commit 都抽出來。

将project仓库中test目录的提交信息抽出为新的branch

cd path/to/project
git subtree split -P test -b test-new-br

2、新建test仓库,并从project的test-new-br branch中拉内容

mkdir ~/test
cd ~/test
git init
git pull path/to/project test-new-br

大功告成 《完》

git 导出指定文件的所有commits相关推荐

  1. IDEA,git单个指定文件分支间合并

    IDEA,git单个指定文件分支间合并 目录 一.IDEA分支树上分别选择分支 二.选择有差异要合并的文件,Get from Branch操作 三.合并完成后,执行commit,push 一.IDEA ...

  2. git 提交指定文件

    1. git status -s --查看仓库状态 2. git add +文件名 --添加需要提交的文件名(加路径--参考git status 打印出来的文件路径) 3. git stash -u ...

  3. git合并指定文件到另一分支

    经常被问到如何从一个分支合并特定的文件到另一个分支.其实,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用git log或sourc ...

  4. git忽略指定文件或者指定文件

    们在使用git进行协作开发的时候经常会遇到一些配置问题,不同成员使用的IDE可能不同,那么IDE生成的配置文件也就不同,比如开发JAVA,idea生成的配置文件为.iml,而eclipse为.proj ...

  5. git 忽略指定文件夹的上传

    我们在使用 git 开发的时候,有些插件的模块文件通过npm install 就可以下载,一般是不上传到 git 中的(因为文件太多会导致很耗时),例如 我的 node_modules 文件夹,不想上 ...

  6. Git删除指定文件的所有记录和版本

  7. git让单个文件回滚到指定版本

    https://blog.csdn.net/fsgsggd/article/details/79875035 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITey ...

  8. Git提交指定的文件

    Git提交指定的文件 提交步骤: git提交指定文件,如果此时修改了其他代码,可先提交指定代码,然后忽略不想提交的代码,最后push之后,恢复之前忽略的代码 1 git status 查看修改的所有内 ...

  9. git merge 单个文件

    在使用git 进行项目代码管理的时候,我们通常会有多个分支,例如A,B两个分支,我们队A分支做了大量的修改,修改完成之后只想把A分支上的a文件合并到B分支上面,而不动其他修改了的文件.此时应该如何操作 ...

最新文章

  1. 无线节能信标核心板V4-测试-2021-4-3
  2. IOS多线程 - 使用线程加载一张图片 - NSThread(1)(转)
  3. Vue中绑定值与字符串拼接以及结合三目表达式实现是否为空判定的使用
  4. 深度解析单例与序列化之间的爱恨情仇
  5. IO静态映射和动态映射
  6. 昆虫繁殖(信息学奥赛一本通-T1312)
  7. 容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源
  8. CV Code|计算机视觉开源周报20200503期
  9. HDU 4336 Card Collector(容斥原理+状态压缩)
  10. php 和bootstrap,bootstrap4和bootstrap3的区别是什么
  11. (01)FPGA时序分析概念
  12. 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
  13. AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface...
  14. 【快代理】开放代理使用教程
  15. mdt 计算机名_MDT Administrator
  16. 水晶头做网线颜色排列
  17. 计算机主机hdmi接口是什么意思,什么是hdmi接口?
  18. HTML5游戏实战 3 60行代码实现水平跑酷游戏
  19. 第9章 Linux文件核心属性知识
  20. 公会晋升计划第 2 季来啦!

热门文章

  1. 基于AT89C51单片机的无级调光系统的实现
  2. xshell下载链接
  3. git和github的区别与简介,简单易懂
  4. 【转载】万字详文彻底弄懂TCP协议:从三次握手和四次挥手说起
  5. UI设计自学很难学会吗?需要报班才能学会吗?
  6. 怎么用java打开文件_如何使用java程序打开一个文件?
  7. 【SARScape 5.6 报错】Invalid XML format(file corrupted?)[EC:40021]
  8. 【centos中doc文件打不开|centos7下载安装wps教程】
  9. Java(基础)单例(Singleton)
  10. hana数据库同步到mysql中