如何在所有的git消息提交中改变特定的字符串?
我想在所有被推到github的消息中grep并更改特定的字符串.是否可以?如何? 我知道如何更改最后一条消息再见git commit --amend,但我想更改所有提交的所有消息. 解决方案 使用 git-filter-branch 带有--msg-filter选项,例如: git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all 请注意,这几乎会改变您的储物库中的提交ID,因此在您的项目中工作的每个人都需要做新鲜的克隆. 请参阅此博客文章以获取更多讨论: http://mmmm0hai.net/博客/2011/03/10/重写git-commit-message-history.html 请注意,上面的命令仅对您的本地副本执行执行,您需要推到GitHub才能将您的更新反映在此处... 逐步 首先使用--mirror标志: ,首先克隆新鲜 $ git clone
2 2023-11-18
编程技术问答社区
将整个开发分支重新归入新的主干分支
我正在使用一个存储库,理论上应该遵循gitflow工作流(请参阅 Vincent Driessen的成功Git分支模型).但是,存储库的初始提交是在develop分支上进行的,并且没有master分支.它是接近的发布时间,我需要创建一个master分支,以反映从一开始就应该在那里的项目就绪状态的master分支.请记住,develop分支有多个功能分支.存储库完全是本地的,尚未被推. 我的想法是创建一个孤儿分支master并将develop分支重现到其中,但我不知道我该怎么做. 那么,如何创建master分支,就好像从一开始创建了吗? 更新:在我的情况下,develop上的第一个提交不是应视为生产的提交,因此将其作为初始master commit是不明智的.该项目处于此状态的原因是因为它最初决定使用git时不使用VC. 解决方案 在摆弄后,这就是我想到的.这是一种更简单的手动方法,用于 vonc的答案. 重新审议整个开发分支 让我们假设您有一个分支d
0 2023-11-18
编程技术问答社区
如何修改旧的Git提交?
我做了3个git提交,但没有被推. 我如何修改较旧的(ddc6859af44)和(47175e84c),这不是最近的一个? $git log commit f4074f289b8a49250b15a4f25ca4b46017454781 Date: Tue Jan 10 10:57:27 2012 -0800 commit ddc6859af448b8fd2e86dd0437c47b6014380a7f Date: Mon Jan 9 16:29:30 2012 -0800 commit 47175e84c2cb7e47520f7dde824718eae3624550 Date: Mon Jan 9 13:13:22 2012 -0800 解决方案 git rebase -i HEAD^^^ 现在,用edit或e(替换pick)标记要修改的 .现在保存并退出. 现在进行更改,然后 git add . git rebase --continue
8 2023-11-18
编程技术问答社区
从git仓库中删除文件(历史)。
(已解决,请参阅问题主体的底部) 现在寻找很长时间了,我到现在为止是: http://progit.org/book/book/ch9-7.html /li> 几乎是相同的方法,但它们两个都留在包装中...粘贴. 我尝试的是: git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name' rm -Rf .git/refs/original rm -Rf .git/logs/ git gc 包装中仍然有文件,这就是我知道的: git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3 和此: git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name"
14 2023-11-18
编程技术问答社区
如何修改多个提交的作者和提交人的名字/电子邮件?
如何更改作者的一系列提交? 解决方案 此答案使用git-filter-branch,文档警告: git filter-branch有很多陷阱,可以产生预期历史记录重写的非显而易见的杂交(并且由于它具有如此糟糕的性能,因此可能会使您几乎没有时间研究此类问题).这些安全性和性能问题不能兼容固定,因此不建议使用其使用.请使用替代历史过滤工具,例如 git filter-repo .如果您仍然需要使用git filter-branch,请仔细阅读 Safety (和 performance )然后警惕地避免在那里列出的许多危害. 更改作者(或委员)将需要重写所有历史记录.如果您还可以并认为这是值得的,那么您应该检查 git filter - 分支.手动页面包含几个示例可以让您入门.另请注意,您可以使用环境变量更改作者,参数,日期等的名称.-请参阅 git手册页. 特别是,您可以使用此命令修复所有分支和标签的所有错误的作者姓名和电子邮件 (来源: github hel
10 2023-11-18
编程技术问答社区
如何从 Git 仓库的提交历史中移除/删除一个大文件?
我不小心将DVD-RIP放入了一个网站项目中,然后不小心git commit -a -m ...,然后,ZAP,回购被2.2 Gigs肿了.下次我进行了一些编辑,删除了视频文件并投入了所有内容,但是压缩文件仍在存储库中,历史记录. 我知道我可以从那些提交的分支开始,然后将一个分支重置在另一个分支上.但是,我该怎么办才能合并这2个提交,以便大文件在历史记录中不显示并在垃圾收集过程中清理? 解决方案 在2022年有效的新答案. 不使用: git filter-branch 此命令推动后可能不会更改遥控器.如果您在使用后克隆,您会发现什么都没有变化,而且存储库仍然具有较大的尺寸.看来这个命令现在已经旧了.例如,如果您使用 解决方案 此解决方案基于: git filter-repo 步骤: (1)在.git中找到最大的文件(将10个更改为您想显示的任何数量的文件): git rev-list --objects --all | grep
4 2023-11-18
编程技术问答社区
如何改变Git中旧提交的时间戳?
如何修改现有的现有,未使用提交吗?描述一种修改尚未推向上游的提交消息的方法.新消息继承了原始提交的时间戳.这似乎是合乎逻辑的,但是是否可以重新设置时代? 解决方案 使用git filter-branch与您要修复的提交的特定哈希设置GIT_AUTHOR_DATE> and GIT_COMMITTER_DATE的Env Filter. 这将使所有和未来的哈希无效. 示例: 如果您想更改日期 commit 119f9ecf58069b265ab22f1f97d2b648faf932e0,您可以这样做: git filter-branch --env-filter \ 'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ] then export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
14 2023-10-22
编程技术问答社区
如何替换git历史中的文件文本?
我一直使用基于接口的git客户端(smartgit),因此对Git控制台没有太多经验. 但是,我现在面临着从历史记录中替换所有.txt文件中的字符串(因此,不是删除整个文件,而只是替换字符串).我找到了以下命令: git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#(PASSWORD1|PASSWORD2|PASSWORD3)#xXxXxXxXxXx#g"' -- --all 我尝试了此操作,不幸的是,当密码确实更改时,所有二进制文件都会损坏.图像等都将被损坏. 有没有更好的方法可以破坏我的二进制文件? 谢谢. 编辑: 我与某些东西混在一起.导致二进制文件损坏的实际代码是: $ git filter-branch --tree-filter "find . -type f -exec sed -i -e 's/originalp
62 2023-10-05
编程技术问答社区
从旧的Git提交中删除私人信息
我有一个由git版本的项目,我想制作开源,但其中包含一些私人信息,这些信息特定于最初使用的环境.我将更改所讨论的信息以从存储库中未包含的配置文件加载.我意识到我应该首先做到这一点,但是由于私人信息仍然存在于先前的投入中,所以我该如何从历史中删除它?我是否只需要根据最新的提交来启动一个新的存储库,并丢失我所有的历史记录,或者有办法在删除任何私人信息记录的同时挽救当前的存储库? 编辑:要澄清,我不想完全删除包含此私有信息的文件,因为它们仍然使用.相反,我想删除/空白/更改其中某些字符串的发生. 解决方案 我不久前写了一个脚本.您可以在这里找到它: (原始写入可从Archive.org查看: https://web.archive.org/web/20160208235904/http:/http:/http://dound.com:80/2009/2009/04/git-forever-forever-forever-forever-forever-forever-for
24 2023-08-24
编程技术问答社区
将提交从一个父代重新绑定到另一个父代
我有一个正在研究的现有存储库,但是最近我学到了很多关于良好实践和git本身的知识.我想将自己的历史振作起来,尤其是一些早期的提交. 以下是当前历史的碎片.我想将e5cb9b8提交的提交在1A92E84上,这样我就只能在历史图中具有一个/两个级别的深度(从视觉上讲,更改E5CB9B8的父).我尝试了重新签名 git rebase -p --onto 1a92e84 e5cb9b8 master 并将其樱桃粉碎成由9ecbe00创建的新分支. Cherrypicking使我获得了平坦的历史,而Rebase失败了以下消息 错误:提示CA230D8C048D22DE6F219DA8A22E70A7773827C38是合并,但没有给出-m选项. 致命:樱桃 - 挑剔失败 无法选择CA230D8C048D22DE6F219DA8A22E70A773827C38 * | 45a0a21 - (7 weeks ago) #17 Updates README.md
12 2023-08-15
编程技术问答社区
使用BFG repo-cleaner后检查git repo
非常基本的git问题: 我将一些妥协的信息上传到GitHub,并使用BFG清洁仓库.我遵循文档并执行以下操作: $ git clone --mirror git://example.com/some-big-repo.git $ bfg --replace-text passwords.txt my-repo.git 我收到以下输出: Found 233 objects to protect Found 9 commit-pointing refs : HEAD, refs/heads/experimental, refs/heads/master, ... Protected commits ----------------- These are your protected commits, and so their contents will NOT be altered: * commit 497fc1c8 (protected by 'HEAD'
8 2023-08-08
编程技术问答社区
纠正删除和添加文件夹的重命名,该重命名发生在历史上很久之前
我将文件夹projectname/stuff/*.py移至projectname/projectname/stuff/*.py,其中projectname/.git/是存储库的基本文件夹.该原始文件夹重命名显然被注册为文件夹的删除,随后添加了新创建的文件几乎(但不完全)与原始删除文件相同.当时我没有注意到这个问题,现在已经有几个月了. i不能再合并或分散与从该分裂之前存在的其他分支的变化,因为.是否有一种简单的方法来解决此问题,以便我可以合并其他分支的更改,而无需经过并修改历史中的所有提交? 解决方案 git不会明确存储移动(并通过扩展名录).相反,它始终记录一个文件的删除和另一个文件的添加.它通过计算已删除和添加的文件的相似性来检测移动和重命名.因此,好消息的一部分是您不必重写您的历史来完成此操作. 相反,您需要告诉diff或合并以查找更名的文件. In diff, you'd use the --find-renames flag 在合并中,您将使用recursi
4 2023-08-07
编程技术问答社区
在Git中混合使用基于合并的两个历史尾巴
我有两个具有单独历史的GIT存储库.经过大量的研究和大量修补后,我遇到了一个看起来像这样的历史(使用YYYY-DD作为伪犯罪 - 用途): HEAD---2016-09---2016-08---2016-07---2016-06 \-----2015-10---2015-09 请注意,由于将2015-10序列合并/移植到中间时,此历史似乎具有两个"根".重要的是,2016-07历史记录中的文件和2015-10历史记录包含完全不同的文件,没有任何共同点. 我想将此历史结合成一条完整的提交行,以原始的订单从最旧到最新的,没有跳过(即,稍后再出现的消失的内容).,换句话说,这里是我想最终得到的: HEAD---2016-09---(2016-08)---2016-07---2016-06---2015-10---2015-09 我将(2016-08)放在括号中,因为作为合并提交,我什至不认为我需要它. 首先,我认为做gi
4 2023-08-02
编程技术问答社区
从github删除文件
我已经在一个项目中使用GitHub已有一段时间了,但是仅作为问题跟踪器.因此,今晚我也花了一些时间将代码付诸实践,并犯了一个新秀错误:我犯了凭证文件和其他不必要的数据.我现在已将其添加到.gitignore文件中,它们不再是问题了,但是我看到它们在历史记录中可用. 构成了安全问题,因此我必须对此进行整理并在此处删除该敏感数据.我是当前唯一的开发人员,所以这就是为什么我仅将代码保存在PC上和实际服务器上,但也想掌握此信息. 到目前为止,我已经尝试了本文,也找到了关于这一点的一些问题,但无法弄清楚这一点.我主要遇到这样的错误:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree. 我会删除整个存储库,但是我在那里跟踪数据有很多问题,因此我需要保留,因此这不是一个选择.我不介意其他提交,我可以从本地计算机上从头开始,但是需要某种方法来失去旧提交及其完整的历史记录,或更改
90 2023-08-02
编程技术问答社区
用-preserve-merges对当前分支中的所有提交进行交互式重定
似乎已经有一些类似的问题,但是它们都不是我想要的. 假设我有这样的历史 * xxxxxxxH (HEAD -> B) Latest commit * (more commits) * xxxxxxxG (B) More commits * xxxxxxxF Merge branch 'master' into B |\ | * xxxxxxxE (master) Another commit on master | * (more commits here) | * xxxxxxxD Commit on master * | xxxxxxxC Another commit * | (more commits here) * | xxxxxxxB First commit on branch A |/ * xxxxxxxA (master) some commit 现在,我想重写分支A的历史记录,可能合并或编辑一些提交,但我也想更改分支A上的第一个提交,也想保
24 2023-08-02
编程技术问答社区
如何通过非交互式地压制除最近提交以外的所有提交来减少臃肿的Git repo的大小?
我的git repo有数百千兆字节的数据,例如数据库备份,所以我试图删除旧的,过时的备份,因为它们使所有内容都使所有内容都更大且较慢.因此,我自然需要快速的东西;更快,越好. 除了最近的,我如何挤压(或只是平原删除)所有提交,而无需手动挤压每个 git rebase -i --root 例如,我有这些提交: A .. B .. C ... ... H .. I .. J .. K .. L 我想要的是(将A和H之间的所有内容挤入A中): A .. H .. I .. J .. K .. L ,甚至这样可以正常工作: H .. I .. J .. K .. L 有一个关于如何 squals squals assist ,但是我想保留一些最近的委员会.我不想 sust sust the最近的提交 . (尤其是我需要将前两个提交从顶部计数.) (几年后编辑.这个问题的正确答案是使用合适的工具来工作.git不是存储备份的好工具,无论它多么方便.有更
8 2023-08-02
编程技术问答社区
真正实现git合并的扁平化
关于stackoverflow上"平坦合并"的问题,答案通常为" git rebase".这些答案尽管错过了一个关键点 - 提交顺序. 假设有一个分支a,其提交为6月1日和8月1日,而B分支则为7月1日( update 恢复以下所述的用户酶:分支是完全独立的,没有共同的血统,例如来自两个不同的存储库).当将B合并到A中时,将有以下历史记录(每个git日志): Merged branch 'B' Aug 1 Jul 1 Jun 1 现在,我正在寻找的是获得相同结果的方法,但没有合并提交(因此,以该顺序为基础的线性历史记录,是的,这意味着重新分配提交). git rebase在这里无济于事,您将获得以下历史: Jul 1 Aug 1 Jun 1 或 Aug 1 Jun 1 Jul 1 换句话说,git rebase总是在另一个分支上堆叠一个分支,而我正在寻找解决方案,该解决方案会插入作者的提交日期. 显然,对于简单的情况,可以通过手动使用git re
6 2023-08-02
编程技术问答社区
重置一个Git合并提交
采用以下情况: 我在主题分支中有一些工作,现在我准备合并回主: * eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1 我从主人那里进行合并,解决冲突,现在我有: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1 现在,合并花了我一段时间,所以我做了另一个提取,并注意到远程主分支有新的更改: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] | | * e7aff
82 2023-08-02
编程技术问答社区