如何按文件拆分每个提交?

2023-12-05

我知道如何使用手动拆分提交git rebase -i,但是如何按文件自动拆分分支中的每个提交?

例如,提交A修改了3个文件,f1、f2和f3。拆分后,有 3 个提交 A-f1、A-f2 和 A-f3。

我想这样做是为了使主要重写变得更容易,因为我只需要压缩一些小的提交。


剧本

以下脚本拆分HEAD按文件:

#!/usr/bin/env bash
set -e

SHA=$(git rev-parse --short HEAD)

# Change to repo root directory
cd $(git rev-parse --show-toplevel)

git reset HEAD^

git diff-tree --no-commit-id --name-only -r $SHA | while read -r f; do
  git add "$f"
  GIT_EDITOR="echo '0a\n$SHA $f\n\n.\nw' | ed -s" git commit -c $SHA
done

生成的提交消息的形式为:

<original SHA> <file name>

<original commit message>

Usage

以下假设您可以运行上面的脚本git-split.

如果您想按文件拆分某个范围内的所有提交,请像这样使用它:

git rebase --interactive --exec git-split <branch>

如果您想在交互式变基期间拆分单个提交,请像这样使用它:

p Commit to split
x git-split

欢迎对脚本进行任何改进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何按文件拆分每个提交? 的相关文章

  • 将构建文件夹推送到不同存储库的 Github 操作

    我有 2 个存储库 存储库 A 包含源代码 存储库 B 将构建文件夹发布到网络 我为此目的采取了行动 但收到错误 git clone single branch branch main github com blockcodelabs B
  • 理解“git remote show”命令输出...“为‘git push’配置的本地引用”的含义是什么?

    我有两个遥控器和两个本地分支机构 本地分支 master 正在跟踪远程分支 origin master 本地分支 mirror 正在跟踪远程分支 github master 这是在我的 git config 文件中 remote origi
  • 解决方案具有位于解决方案文件夹外部的项目

    我尝试通过选择将我的解决方案添加到本地存储库File 添加到源代码管理 但我收到以下消息 源代码控制 Git当前解决方案包含位于解决方案文件夹外部的项目 这些项目不会在 Git 存储库中进行源代码控制 要将所有项目添加到单个 Git 存储库
  • Git 命令以编程方式将文件的一系列行添加到索引?

    我想要一个命令可以让我做类似的事情 git manual add some file txt 10 20 这相当于 git add p some file txt 并说y仅包含第 10 行到第 20 行的大块 是否有内部 git 命令可以让
  • 我在使用“heroku open”命令时遇到错误

    我在 heroku 上创建了一个 python 应用程序 推动后我给了heroku open命令 我在浏览器上遇到这样的错误 Application Error An error occurred in the application an
  • 在 Windows 上,无法创建目录“/home/<用户名>/.ssh”

    要使用 gitbash 在 Windows 上配置 git 如所解释的here https help github com articles generating a new ssh key and adding it to the ssh
  • GIT Pull 删除了我的提交

    在 git pull 之后 我已经完成了 git Reset 以在合并之前撤消与提交 ID 的合并 不知何故 我的整个提交都消失了 而且我也无法在历史记录中看到该提交 但我有提交 id 在 git show 命令上我可以看到我的更改 我如何
  • 版本控制 rpm 规范文件

    我正在配置一台构建机器来为大量非常相似的项目生成 rpm 每个项目的规范文件在名称上以及有时在依赖项和其他属性上都略有不同 每个项目都有自己的 git 存储库 其中包含项目文件 这些规范文件仅存在并且实际上仅对构建系统本身有用 每个项目都可
  • 如何恢复已删除的文件[重复]

    这个问题在这里已经有答案了 可能的重复 在 Git 存储库中恢复已删除的文件 https stackoverflow com questions 953481 restore a deleted file in a git repo 如何恢
  • 如果检测到更改中的特定短语,如何阻止 git commit?

    我注意到开发人员倾向于做的一些模式 例如使用以下代码提交 javascript 测试fdescribe or fit留在其中 这意味着只有一个测试 套件将运行 通常是在审查阶段发现的 但最好尽早发现这些小事情 想知道是否有一种方法可以配置
  • Git 从不同的存储库中提取分支

    我当前的存储库中只有几个文件 我想合并来自不同存储库的远程分支 从中拉出并合并一个分支github com username code git 分支装载机 然后从中拉出并合并一个分支github com username code git
  • 分支和文件夹的 gitolite 权限

    在 gitolite 我想要 developers能够推送到除以下之外的任何分支master I want user1能够推送到任何分支 包括master 除了不是某个目录master 我该怎么做呢 这应该解决以下两个问题 repo are
  • Visual Studio 代码中的“Git:gpg 未能签署数据”

    全新安装 Linux 后 我尝试设置我的环境 并且不断收到Git gpg failed to sign the data在本地提交更改时出错 我使用的是 Visual Studio Code 专有版本 而不是开源版本 gitconfig u
  • 是否可以在 Git 项目的所有分支中执行“grep 搜索”?

    是否可以运行git grep在 Git 控件源项目的所有分支中 或者还有其他命令要运行吗 问题 如何在 Git 历史记录中 grep 搜索 提交的代码 https stackoverflow com q 2928584 6309 建议 gi
  • Git 粒度——解决一行内的差异

    git 基于行的粒度或 diff 粒度是否可以增加到单词 字母分辨率 每行多条语句或使用 git 编写纯文本是值得的 根据评论重新阅读问题时 我想我明白了您最初的意思 所以我将给出一个真正的答案 与伊斯梅尔 巴达维的一行评论 https s
  • 在 $git push -u origin main 命令之后,Git bash 不请求任何身份验证,实际上什么也不做

    当我尝试将代码上传到 github 时 以下是我在 Git Bash 终端中执行的步骤 当我尝试使用将代码推送到 github 时 git push u origin main光标移动到下一行并持续闪烁 但不执行任何操作 git remot
  • Egit 拒绝接受 id_rsa

    我是第一次尝试在 Eclipse 中设置 egit 的 git 用户 这样我就可以继续通过 Eclipse 轻松编码 问题是 每次我尝试通过 egit 克隆存储库时 都会出现错误 无法列出可用分支 原因 ssh 电子邮件受保护 cdn cg
  • 使用可通过 FTP 访问的 Web 服务器进行 Git 托管?

    我运行一个 糟糕的 网站 托管在第三方网络服务器上 我可以通过 FTP 访问我的 Web 服务器 据推测 Git 本身具有通过 FTP 推送 拉取的能力 由于我的 Web 服务器已经可以随处访问 我希望将其用作集中式 Git 存储库 我可以
  • 获得干净的 git 沙箱的最有效方法是什么?

    对于我的持续集成构建 我想确保我的 git 沙箱中没有存放任何杂散文件 并且没有任何文件被无意中更改 我知道关于git reset hard HEAD 这解决了部分问题 但我想我想做的是删除所有未跟踪和忽略的文件 我可以用蛮力的方式做到这一
  • 运行 npm install - 如何配置不使用 SSH(端口被防火墙阻止)

    当我跑步时npm install大多数模块配置正确 然而 至少有人想击中ssh 拉取模块的地址 不幸的是 我的公司有一项政策 不允许内部网络之外的 SSH 连接 我收到的具体错误是 Error while executing npm ERR

随机推荐