问题标签 [git-history-graph]

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 回答
1330 浏览

git - Git日志仅记录文件的一部分?

https://stackoverflow.com/a/5493663/1172541解释了如何对文件执行 git log 命令。有没有办法跟踪文件的一部分是如何用 git log 或其他 git 命令更改的?(当然,这肯定会对 git 的差异引擎造成压力,因为部件的长度和行号会发生变化。不过 git 在这方面做得很好。)

0 投票
1 回答
37 浏览

git - Git消除字符串出现

我已经在一个项目上工作了一段时间(大约 1k 次提交,几个月的工作),我相信从 git 存储库树中的所有文件和提交中消除特定字符串的出现是正确的决定。提交消息(减去上面提到的字符串出现)和日期应该在之后的 git 日志中看起来很正常,所以没有人知道这个字符串存在。

强制推送和破坏其他开发人员存储库克隆是完全可以的。如果解决方案不简单也没关系!我只关心一个干净的历史。

0 投票
10 回答
242614 浏览

git - 如何在 Visual Studio Code 中查看 Git 历史记录?

我可以从 Visual Studio Code 执行各种 Git 命令,但是我找不到可视化历史记录的方法。

0 投票
1 回答
74 浏览

git - 删除历史上很久以前的一些提交

我们正在与一位程序员同事一起开发一个存储库,他将其提交到一个单独的分支,而我在 master 上。
几天前,他决定将 master 合并到他的分支中,但在合并后遇到了一些环境依赖性问题,并决定恢复该合并。一切都很好,我们一直在努力。

现在我需要将他的分支合并到 master 我在恢复提交时遇到了困难,因为它删除了一些自合并以来我没有更改的文件。

我认为这可以通过删除上述合并来解决,并且它会从历史中恢复。

现在的问题是如何删除历史上的一些提交?

0 投票
1 回答
195 浏览

git - Git Rebase 创建非线性历史

Git 存储库只有 master 并且每个人都在处理它(不要评判我,到目前为止是一件小事),默认情况下启用 Rebase。AFAIK git-rebase 重写历史,根据日期一一应用提交,并在此过程中需要时进入 MERGING 状态。但有一件事让我和团队很烦恼,历史有时不是线性的,请举几个例子:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

这里会发生什么?或者我误解了 git-rebase 的工作原理?

0 投票
3 回答
479 浏览

git - Git:这种分叉是如何发生的?

情况

  • 我有一个本地 Git 存储库。

在此处输入图像描述

  • 我只有在分支上: master

  • 我曾经有另一个分支,但我将它合并到master然后删除它。

  • 这种合并和删除的分支从fe6263e.

  • 0c81926是一个--修正c79dc19

  • 没有标签,也没有任何其他指向c79dc19. 我知道,如果某个对象指向修改后的提交,则此类提交将继续显示在历史记录中。但这种情况并非如此。

问题

  • 为什么历史线没有变平?

  • 为什么还在c79dc19显示?

  • 这是怎么发生的?

正如我所提到的,没有任何意义,我做了一个git -gc清理任何挂起的提交。

0 投票
1 回答
628 浏览

git - Git - 分支提交历史重复

我有一个分支,几乎所有提交都有一个错误的电子邮件"mywrong@email.com",我想将该电子邮件更改为我当前的电子邮件"mynew@email.com"

在搜索时,我发现了这个:

请参阅此处 COMMITTER 和 AUTHOR 之间的区别。真正更改提交身份验证很重要,否则机智会显示在原始提交mynew下进行了提交。oldnew在这里,我想更改作者和提交者。

然后我做了git commit -am "change author"git pull并且git push

问题是现在我所有的提交都是重复的,你可以在这里看到

我搜索了如何删除这些提交,我发现了这个:

但是我还没有尝试...我该怎么办?

下次我想替换电子邮件提交时,避免这种混乱的正确命令是什么?

0 投票
2 回答
1341 浏览

git - Git:将两个存储库相互合并

我有一个存储库 A(原始存储库)具有完整的提交集。在某个时间点,决定不再使用存储库 A,并从头开始创建一个新的干净存储库 B,使用复制 + 粘贴将所有存储库 A 的内容(而不是将 A 的内容合并到干净的 B 中,以便保留提交历史)在其中。我现在想要实现的是在第三个新的干净存储库 C 中粘合存储库的提交和历史(粘合历史非常重要)。最终目标是存储库 C 应该包含来自源存储库 A 和B 按时间顺序排列,就好像根本没有创建存储库 B,例如好像在存储库 A 中进行了工作。

所以现在的情况是:

回购 A:提交 A1 > 提交 A2 > 提交 A3 > ... > 提交一个

回购 B:提交 B1 (= A1 + A2 + A3 + ... + An) > 提交 B2 (= 提交 An+1) > ... > 提交 Bk

尝试了以下方法:

然后解决了冲突。由于历史以某种方式搞砸了,因此部分工作。

然后尝试了我认为最干净的方法 - 仅将 repo A 合并到 repo C 中,然后从 B2 ... Bk 中挑选 repo B 的提交。它可以工作,但樱桃采摘合并提交会减慢合并过程。

我可能正在复制一个主题,如果我这样做了,请告诉我,因为爬过许多线程并且大多数时候看到如何通过将它们放置在最终存储库中的不同文件夹中来将两个存储库添加到第三个存储库,但事实并非如此。如果您可以分享最合适、语义正确且对 git 友好的方法。

非常感谢。

0 投票
3 回答
612 浏览

git - 如何查找给定的提交是否在分支的第一父链上

我正在尝试编写一种方法来判断给定提交是否在给定分支的第一个父链上。因此,例如,merge-base 不会飞,因为提交可能已被合并。我想知道确切的提交是否曾经是分支的尖端。

注意:有问题的分支受制于非快进合并策略。

0 投票
1 回答
991 浏览

git - 更改根提交父项以指向另一个提交(连接两个独立的 git 存储库)

我有一个在 svn 存储库中有超过 3 年历史的项目。它被迁移到了 git,但是这样做的人,只是拿了最后一个版本,把这 3 年的历史全部扔掉了。

现在该项目在一个存储库中具有最近 3-4 个月的历史记录,并且我已将另外 3 年的 svn 历史记录导入到一个新的 git 存储库中。

有没有办法将第二个存储库的根提交连接到第一个存储库的最后一个提交?

它是这样的:

更新:

我刚知道我需要做 a git rebase,但是怎么做?请让我们考虑一下提交日期,就像它是 SHA-1 代码一样......答案是使用git filter-branchwith--parent-filter选项,而不是git rebase.

更新 2:

我尝试了该命令git filter-branch --parent-filter 'test $GIT_COMMIT = 443aec8880e898710796a1c4fb4decea1ca5ff66 && echo "-p 98e2b95e07b84ad1e40c3231e66840ea910e9d66" || cat' HEAD,但它不起作用:

更新 3:

它在 Windows CMD 或 PowerShell 上不起作用,但在 Windows 上的 Git Bash 中确实有效。