标签: git-blame

在Git中找到第一行代码

我试图跟踪一段代码(只是一行)到它的提交.

使用blame只会指向一个提交,其中这个行被作为提取方法样式重构的一部分移动.

我可以使用哪些技术来进行提交,这是第一次在代码库中存在特定文本?

git git-blame

5
推荐指数
1
解决办法
1519
查看次数

git责备使用grep命令过滤的所有文件中的特定行

我知道如何在文件中运行gblame.

我知道如何在目录中的所有文件中grep内容.

我希望看到围绕那个包含内容的特定行的gblame.例:

$ blame -R "content" ./
Run Code Online (Sandbox Code Playgroud)

我看到了一个文件列表.我想要了解所有主题,并了解谁触及了这些代码行.

git blame vim-fugitive git-blame git-grep

5
推荐指数
1
解决办法
2219
查看次数

如果我解决冲突它会改变Git责备吗?

我试图找出合并冲突是否导致错误,但我遇到了困难,因为我不清楚冲突解决方案是如何影响的git blame.

假设我在master中有一个文件:

a();
b();
c();
Run Code Online (Sandbox Code Playgroud)

我在master中修改它:

a();
d();
c();
Run Code Online (Sandbox Code Playgroud)

但同事也是如此,他们在另一个分支中以不同的方式对其进行修改,然后将它们合并到master中:

a();
e();
c();
Run Code Online (Sandbox Code Playgroud)

可以解决冲突会影响责任吗?换句话说,如果我的同事通过我的版本来解决冲突:

a();
d();
c();
Run Code Online (Sandbox Code Playgroud)

git blamed();线,谁就会被指责:我和我的同事?

同样地,让我们说git感到困惑,并认为第一行和第二行都是冲突的:

<<<<
a();
d();
====
a();
e();
>>>>
Run Code Online (Sandbox Code Playgroud)

如果我的同事用他们的版本解决冲突:

a();
e();
c();
Run Code Online (Sandbox Code Playgroud)

我是git blamea();条线路,我(该线路的原作者)会受到指责,还是我的同事(即使他们没有改变它们,最后"触及"它)会受到指责?

git version-control merge-conflict-resolution git-blame

5
推荐指数
1
解决办法
417
查看次数

如何搜索有人用git更改的字符串?

我想使用搜索一个特定的字符串,git grep但是我想使用来过滤结果git blame,因为我知道我要查找的字符串是由特定的人更改的。

我只是不知道如何将它们结合起来以获得想要的结果。

谢谢您的帮助。

git grep git-blame

5
推荐指数
1
解决办法
457
查看次数

Git:重命名后可靠地获取责备历史

我正在尝试构建一个git log命令来检索具有以下属性的文件历史记录(在复制和重命名之后):

  1. 我希望日志在注释之后“关闭”——也就是说,如果我git blame -elfwM记录了历史中的任何提交(无论文件当时具有什么名称),我希望出现在注释中的每个提交也被载入史册。

  2. 我想知道历史记录中每个条目的文件的原始名称。对于没有重命名文件的提交,这将与文件名相同;对于提交的提交,我想知道该提交的每个父级中的原始文件名。

  3. 对于文件的任何给定注释(在其历史记录中的任何一点),我希望该提交的相应历史记录条目(我们知道存在于属性 1)使其作者、日期和文件名与作者、日期和文件名匹配注释的文件名。

  4. 满足 (1),我想要尽可能少的额外提交。我特别想排除没有以任何方式影响文件的提交。

到目前为止,我能做的最好的是:git log --raw --follow -m --pretty="%H%n%P%n%aL%n%cs%n%s" -- FILENAME. 这是我在这条线背后的想法:

  • --follow 应该完成以下重命名和副本的工作(但不给我文件名)
  • --pretty=...应该给我提交、父母、作者、提交日期和主题。我猜原作者 + 提交日期是git blame有用的,但如果那是错误的,请纠正我。
  • --raw 应该给我一个给定提交的原始文件名和新文件名。
  • -m 应该拆分合并提交的条目,以便我可以获得单个父母的原始名称。

这在典型情况下似乎可以正常工作,但我编写了一个脚本来演示失败的场景。这是其中一次运行的示例输出:

Created git repository at /var/folders/y4/2t2n3dhj4bz4cwsrm801t_bm0000gn/T/tmp.Rtj55RWb
Committed: cbc8198fd5eb975ab5fc1fcc66889872429a40fe (master) Initial commit
Committed: 5628acbb478a8786eaec186bf4e6050142049848 (workbench) Renamed foo.txt to bar.txt
Committed: 2f6d49b3aa35ffa2953a65e21ba5c21d130fa3b1 (workbench) Modified line 3 of bar.txt.
Committed: bac0a739a1fd2acc7c0ce466d9055942cbf87ccb (workbench) Added dummy.txt
Committed: c018ca1b4436b73237c9a727ed2353cbd8152928 (workbench) Removed dummy.txt
Committed: 18bec91206357ec23ffe53a01d20ec64f7667e4e (master) Renamed …
Run Code Online (Sandbox Code Playgroud)

git git-log git-blame

5
推荐指数
0
解决办法
43
查看次数

如何在选择特定提交后返回结果:Gblame?

来自vim 的逃犯插件的自述文件:

:Gblame带有git blame输出的交互式垂直分割.按行上的Enter键以编辑行更改的提交,或按o以拆分方式打开它.

一旦我按下特定的提交输入,是否可以返回到责备输出?

git vim vim-plugin git-blame

4
推荐指数
1
解决办法
2258
查看次数

怎么--no-ff合并破分和责备?

理解Git Workflow文章说,

因此,您添加了一条新规则:"当您在功能分支中合并时,请使用-no-ff强制执行新提交."这样可以完成工作,然后继续.

然后有一天你发现了生产中的一个关键错误,你需要追踪它何时被引入.你运行bisect但继续登陆检查点提交.你放弃并手工调查.

您将错误缩小到单个文件.在过去的48小时里,你一直负责看看它是如何变化的.你知道这是不可能的,但是责备报告文件在几周内没有被触及.事实证明,责备报告了初始提交时间的变化,而不是合并时的变化.您的第一个检查点提交在几周前修改了此文件,但此更改已于今天合并.

没有ff的创可贴,破碎的二等分和责备神秘都是你用螺丝刀作为锤子的症状.

--no-ff当您明确阻止快进合并时,git merge 就是一种情况.但是,如果一个提交不是另一个提交的直接祖先,那么快进甚至不会发生.这是一个罕见的开发方案.换句话说,大多数合并都是非快进类型.那么如何通过--no-ff打破的功能bisectblame

git git-merge git-bisect git-blame

4
推荐指数
1
解决办法
678
查看次数

git 注释压缩的提交

我一直对“压制”或重写历史持怀疑态度,现在我几乎确信我应该在我管理的存储库中禁止这种做法。但也许有人可以回答这个问题,并为我的壁球冠军同事们拯救这一天。

\n\n

我刚刚遇到一行代码,我想了解背后的推理,所以我使用git annotate找出它是谁写的以及为什么。但它指向一个“压缩”的提交,一长串关于无数功能和错误修复的提交消息标题,但没有详细信息。不太有帮助。

\n\n

“哦,但是总会有转发的,”我得到了保证。“信息实际上永远不会在 git 中丢失!” 好的,很高兴听到!但我尝试了git reflog <squashed-commit-hash>,但根本没有输出\xe2\x80\x94没有帮助。我也尝试过git rev-list <squashed-commit-hash>,并获得了数百个哈希值的列表,并在手动检查其中一些之后git show,我得出结论,它们不是被压扁的部分\xe2\x80\x94也没有帮助。

\n\n

那么实际上是否有可能找出哪一个提交对该行代码做出了贡献,并查看该提交的整个消息?是否可以通过单个 git 命令来完成,而不必成为 bash 大师?或者这些信息实际上已经在 git 中丢失了吗?

\n

git git-squash git-blame

3
推荐指数
1
解决办法
1251
查看次数

在具有许多提交的存储库上加速`git blame`

我正在尝试git blame以下文件(在我的本地机器上运行),因为它太慢而无法产生 GitHub 的责备:

https://github.com/Homebrew/homebrew-core/blob/master/Formula/sqlite.rb

但是在本地运行也很慢,在我的机器上运行一分钟以上

time git --no-pager blame Formula/sqlite.rb > /dev/null
Run Code Online (Sandbox Code Playgroud)

存储库包含超过 150K 的提交。

有没有办法加快git blame命令的速度?

git git-blame

3
推荐指数
2
解决办法
682
查看次数

查看谁最后更改了 Git 存储库中的特定行

我已经使用git blamegit log file.py查找更改,但是有没有办法查看文件特定行上的更改?例如:文件 index.html 的第 84 行。

git blame git-blame

2
推荐指数
1
解决办法
1811
查看次数

git怪是当前分支中不存在的文件

我有一个文件存在于branch_A中,但不存在于branch_B中。

我要跑步

> git checkout branch_B
> git blame branch_A file
Run Code Online (Sandbox Code Playgroud)

但是,git抱怨我没有本地文件-这是正确的,但忽略了我要怪到相对于branch_A的事实。我希望git blame可以检查相对于所需分支而不是已签出分支的文件是否存在。

如果在分支B上运行此命令,我可以欺骗git blame做我想做的事情:

> touch file
> git blame branch_A file
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

git git-blame

2
推荐指数
1
解决办法
1432
查看次数