问题标签 [git-history]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
285 浏览

git - git filter-branch 部分丢失历史记录

我在一个文件夹中有一个存储库,不久前我将其拆分为子模块。

初始:(T0)

当前:(T1)

目前我可以从一开始就看到所有 git 历史记录。现在我想把这个 subpackage1 移到另一个 repo 中。

当我执行手术并过滤分支时,git filter-branch --subdirectory-filter <directory of subpackage1> -- --all我会丢失 T0 和 T1 之间的历史记录,这是提交次数最多的。

当我用 跟踪历史时git log --follow --pretty=format:"%H" <filename>,我看到同一个文件有两个版本,最新版本带有文件路径(如'subpackage/src/../filename')和只有文件名的旧提交(如'filename')。

如何恢复整个子模块(最佳情况)或特定文件(最坏情况 - 我只对 4-5 个文件的历史记录)的历史记录

0 投票
1 回答
38 浏览

git - 当git历史包含私人信息时如何使源代码开放?

我们已经从我们的程序中删除了私人信息,并将这些文件添加到我们的 git 忽略文件中。我们现在想公开我们的回购协议,但我担心访问者可以从 git 历史记录中恢复机密信息。解决方案是什么?

0 投票
0 回答
21 浏览

git - 将 git 历史记录复制到以前克隆的存储库

我想知道有人知道如何将旧的 git 历史复制到已经工作了几个星期的新克隆存储库。

当你克隆它时,我收集它是可能的。也尝试过像这样的工具 在此处输入链接描述

但我现在已经结束了这一点,并且在新的 repo 中有多个新的提交。所以代码中的注释和日期/时间只指我克隆它的那一天..

任何想法如何将旧的 git 历史复制到这个新的仓库?

谢谢!

0 投票
5 回答
833 浏览

git - 如何从 git 历史记录中删除提交但保持图形完全相同,包括合并?

我有的:

我需要的:

不久前,我做了两个提交,我想从我的 git repo 中删除。我尝试了各种不同的变基“教程”,所有这些都以奇怪的 git 历史结尾,所以我创建了一个示例 repo,结果不是我所期望的。谁能帮我理解我错过了什么?

我有两个分支,master并且foo. 我使用要删除的单个文件提交B ,并在我修改此文件的位置提交C。在其他提交中,我再也没有碰过这个文件。

提交 ID:

所以我使用rebase -i f0e0796和删除B 5ccb371C a46df1c,对吗?如果我正确解释了结果,这就是gitk我的 repo 显示的内容,尽管git branches仍然列出了第二个分支。

谁能告诉我这里发生了什么?

编辑: 这是如何从第一张图重新创建回购:

0 投票
1 回答
34 浏览

git - 我可以在现有提交下进行 git 提交而不在下一次提交中保留其任何内容吗?(只是为了让代码成为历史)

我曾经和我的团队一起做一个项目,我们在迁移到 git 之前使用 svn 进行版本控制,现在 svn 的历史早已不复存在。我有我们开始使用的原始资源,我希望它出现在 git 历史记录中,这样我就可以看到我们从 git 或 IDE 所做的更改。

为了能够做到这一点,我必须能够将原始资源放在现有提交之下而不保留任何内容。

现在的历史是怎样的:

  1. 添加自述文件
  2. 添加新来源
  3. 改变 1
  4. 改变 2
  5. ...

我希望它看起来如何:

  1. 添加自述文件
  2. 添加旧资源
  3. 添加新来源
  4. 改变 1
  5. 改变 2
  6. ...

我们还删除或重命名了许多文件,我不希望它们属于存储库的当前状态。我能做的最好的事情是检查新分支上的自述文件提交,将旧源放在它上面,然后使用他们的策略将 master 合并到分支中以覆盖文件。我可以将旧源视为第二次提交,然后在最后一次更改之上进行合并提交。它保留已删除或重命名的文件,并且不显示现有文件的历史记录。

这甚至可以在不必重建整个回购的情况下完成吗?

0 投票
2 回答
298 浏览

git - 为 git 历史中的所有提交更改 git 子模块的远程存储库

如何在不破坏提交历史的情况下更改 git 子模块的远程 url?目前,如果我检查旧提交,我的子模块似乎不再存在旧的远程 url 女巫。

我的工作流程:

  1. 使用提交 A,B 克隆 repo
  2. git子模块更新--init
  3. 更改子模块 url
  4. 将 .gitmodules 推送到远程(提交 C)

  5. 使用提交 A、B、C 克隆 repo

  6. 切换到提交 A
  7. git submodule update --init -> 失败

-> 还想要新的子模块远程 URL,但仍然是 .gitmodules 中的旧 url

似乎git submodule update --init仍在尝试使用旧的远程 url

如果按照建议也尝试使用 git submodule update,但我也收到错误:

The Git repository with name or identifier OLD_REPO_NAME does not exist or you do not have permissions for the operation you are attempting.

0 投票
2 回答
85 浏览

git - 成功合并后丢弃提交,同时保持合并提交的代码完整

从 master 分支有两个分支:develop 和 foo。develop 和 foo 都与 master 发生了几次提交不同。

foo 已合并到开发中。现在 foo 和 develop 指向同一个合并提交,即提交的两个“流”在这个合并提交中相遇(对于近似词汇表示歉意)。

此合并提交中的代码与应有的完全一致。没有什么是应该撤消的。

现在假设没有人会想要检查 foo 的任何先前提交。所以,我们想“删除”这些提交(即不撤消这些提交带来的修改,只是没有它们在历史记录中。事实上,查看历史记录,它看起来好像 foo 从未存在过,并且合并提交不再是两个“提交流”的交汇点)。

当然,如果 foo 在合并到 develop 之前被压扁会更好,但这并没有发生。

在合并后尝试 rebase/squash foo 以解决一些冲突。由于代码与合并提交中的代码完全相同,因此不需要解决冲突(免责声明:可能是未以正确的方式尝试此变基)。

有没有办法做到这一点 ?

0 投票
1 回答
32 浏览

git - 如何将存储库的大量历史从一台服务器移动到另一台服务器?

我有一个非常大的存储库,具有悠久的更改历史。我必须将它从一台服务器迁移到另一台服务器。新服务器有一个大小限制,我需要以某种方式解决。我想移动存储库及其所有历史记录。但是历史太大了,所以我想拆分历史并分别上传每个部分。它应该可以工作,但我不确定我应该运行哪些 git 命令来拆分历史记录并上传每个部分。我该怎么做?

0 投票
1 回答
115 浏览

visual-studio - 创建 Visual Studio 扩展以将项目添加到 Git 历史记录页面

我正在尝试创建一个 Visual Studio 2019 扩展。单击历史记录中的提交时,我想在上下文菜单中添加一个附加选项。然后从那里我想获取在该提交之前和之后更改的文件的快照。我无法将按钮添加到上下文菜单中。

我已经安装了命令资源管理器,并且能够找到对上下文菜单的引用。

在此处输入图像描述

但是,当我在 .vsct 文件中添加对它的引用时,它找不到它。

在此处输入图像描述

我想我需要添加一个引用正确头文件的 Extern 元素,但我在我的系统上找不到包含这些值的任何 .h 文件。我还尝试在对象资源管理器中查看 Microsoft.TeamFoundation.Git.Provider.dll 程序集,但没有看到任何有希望的东西。

这是我要扩展的上下文菜单。

在此处输入图像描述

我正在尝试做的事情是否可能,或者 Git History 页面是否以无法扩展的方式构建?

提前感谢您的帮助!

0 投票
2 回答
180 浏览

git - 加入同一存储库的旧版本的历史记录

我有一个包含这段历史的存储库:

然后,这个存储库被“拆分”(基本上,使用 git-subtrees 创建了另一个存储库,它的历史从“D”开始)。

现在,我有这个历史的另一个回购:

如何将同一项目故事情节的这两个“部分”合并到一个存储库中?
最终结果必须是:

我已经尝试了很多东西,但所有这些都包括合并,这不是我想要的,因为合并不会保留一些更改,例如已删除的文件。
此外,我尝试为存储库的最后一个版本的所有更改生成补丁并将它们应用到旧版本中,但出现了很多error: <file> already exists in index错误。

更新

我发现了另一个关于重新提交提交的问题,这正是解决我的问题的方法,结合了git replace --graftgit filter-branch.

更新 2

现在我的任务已经完成,我发布了对以下问题的完整、正确的答案。