我将问题简化到最低限度。Linux下的git命令如下:
git log --pretty=format:{"commit":"%H"}
Run Code Online (Sandbox Code Playgroud)
给我一个有效的 json 元素,比如:
{"commit":"20cafdecc9898113ac6215ae70cd7622dc2cae3b"}
Run Code Online (Sandbox Code Playgroud)
在 Windows 下,我获得了一个无效的 json 元素,因为在某种程度上,Windows 似乎删除了双引号元素,我获得:
{commit:20cafdecc9898113ac6215ae70cd7622dc2cae3b}
Run Code Online (Sandbox Code Playgroud)
您知道为什么吗?或者我该如何修复它,使其在两个操作系统下都可以工作?谢谢你!
我正在为我们的团队计划一个新的部署流程。
对于每个构建 X,我们都有$last_commit_from_last_build X-1 和现有构建 X 上的$last_commit。
我们不会并行运行构建,这意味着在构建 X 中可能会有多个提交,因此我们需要列出这些提交,这样我们就不会错过它们。例如,这可能是从最旧到最新的提交顺序:
( last_commit_from_last_build )(构建 X-1)、( some_commit_1、some_commit_2、last_commit )(构建 X)
在 Build X 中,我们需要构建 $last_commit_from_last_build 和 $last_commit 之间的所有提交。 我们只需要 $last_commit_from_last_build 和 $last_commit 之间的提交。
因此,我们决定使用:
git log $last_commit_from_last_build...$last_commit.
问题是,如果 GitHub 上有以下历史记录,它会显示奇怪的结果:
当我们跑步时git log 3ec29f0...573e22e
我们收到以下结果:
提交bdd和e57位于这些提交之间。
第637章不是!
我们的逻辑可能会出现什么问题,是否有更好的方法来获取这些请求的列表?这会产生错误的构建,并阻止我们继续我们的项目。
我的存储库顶级层次结构如下所示:
/dir1
/dir2
/dir3
Run Code Online (Sandbox Code Playgroud)
我正在HEAD并git log --oneline --first-parent -5 -- dir1/给出类似以下内容:
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
Run Code Online (Sandbox Code Playgroud)
网络上有很多很酷的东西,git log --oneline --first-parent db7c.. -- dir1/比如
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
Run Code Online (Sandbox Code Playgroud)
甚至git log --oneline --first-parent db7c..ba0f -- dir1/在两端进行限制
ba0f COMM-17 Some stuff
cda8 New files
Run Code Online (Sandbox Code Playgroud)
但是,天啊,我找不到任何可以帮助输出所有提交直至特定提交 id 的东西。我需要类似的git log --oneline --first-parent ..cda8 -- …
我正在尝试开发一种要传递的格式字符串,git log --pretty以便每个日志条目以完整的提交消息结尾,但每个日志条目都由一个空行分隔。问题在于,有些完整提交消息以换行符结尾,有些则不然。
例如,假设我有两个提交abc1234和def5678,但仅abc1234在完整提交消息的末尾包含换行符。在命令行上输出原始提交内容将如下所示:
[prompt]$ git cat-file commit abc1234
(...)
Title FOO
Full commit message FOO
[prompt]$ git cat-file commit def5678
(...)
Title BAR
Full commit message BAR[prompt]$
Run Code Online (Sandbox Code Playgroud)
请注意新的 shell 提示符如何出现在最后一行输出的末尾,表明提交在完整提交消息的末尾def5678不包含换行符。
假设这def5678是父级abc1234,我想输出一个简单的日志,其中每个条目仅包含短提交哈希、标题行和完整提交消息。我可能会尝试这样的事情:
[prompt]$ git log --graph --pretty='commit %h%n%B' abc1234
* commit abc1234
| Title FOO
|
| Full commit message FOO
|
* commit def5678
| Title BAR
|
| Full commit message …Run Code Online (Sandbox Code Playgroud) 上下文:我正在制作一个工具来分析两个分支之间的差异。我想查看origin/develop和上的提交历史origin/release。由于我只需要历史记录,因此我克隆了仅包含历史记录的项目 ( git clone --bare)
之后git fetch,我希望查看发布和开发的最新提交,而不必git merge origin/develop|release在每个分支上进行。所以我试着只是git log origin/develop [... format options]。
在某些项目上,它可以按预期工作。但在一个特定的项目中,我收到此错误:
$ git log origin/develop master * ] 11:01
fatal: ambiguous argument 'origin/develop': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
如果我尝试git remote -v,我可以看到它的origin定义是正确的。怎么可能origin/develop不是有效的修订呢?
假设我有一个名为 的函数MySuperFunction。如何列出添加/删除/更改/使用此函数的所有提交,仅包含该更改的上下文?
例如,如果 commitc使用此函数添加了一行和其他 100 行,我想查看:提交哈希、提交消息、提交的作者和日期(可选),最重要的是:函数所在行周围的差异添加了上下文前后各 5 行(包含文件名和行号),但不是提交的全部 100 行。
我尝试了什么以及为什么它不起作用:
git log -p | grep -C5 "MySuperFunction"- 打印带有上下文的差异,但不打印提交信息。git grep "MySuperFunction"- 只打印当前的使用情况MySuperFunctiongit log -GMySuperFunction- 只打印commit信息,但不打印diffgit log -GMySuperFunction -p- 打印提交信息和差异,但它打印每个提交的整个差异,而不仅仅是周围的行MySuperFunctiongit rev-list --all | GIT_PAGER=cat xargs git grep 'MySuperFunction'- 打印内容中包含“MySuperFunction”的所有提交,而不是其差异是否有任何 git log 选项,或者我是否必须编写自己的脚本来仅获取差异的输出git log -GMySuperFunction -p并过滤差异,留下提交信息?
我尝试通过 gitlog 显示 git 中文件的完整历史记录。问题是该文件的父文件夹在历史记录中被重命名,我喜欢查看完整的历史记录。
git -log 文档说参数--follow和-M显示使 git log 遵循重命名。
我尝试了 gitlog 参数的不同组合,例如
git log -M --oneline --all -- --follow newpath/my-file.php
git log -M --oneline --all -- newpath/my-file.php
乃至
git rev-list --all -- newpath/my-file.php --objects --in-commit-order | git log --no-walk --oneline --stdin
但无论我尝试什么,历史记录总是在文件的父文件夹被重命名的提交处结束。
我已经可以确认:
在重命名提交中仅重命名了文件夹,文件的内容100%不变,因此git应该简单地发现旧路径上的文件和新路径上的文件是相同的并且已重命名。
git shot name-status对于重命名提交显示R100 oldpath/my-file.php newpath/my-file.php(确认文件内容 100% 相同)
历史的“旧半部”和“新半部”似乎是正确的,都包括重命名commt
当我运行git log -M --oneline --all -- --follow newpath/my-file.php最旧的提交时
0979744 renamed: oldpath/ -> newpath/
当我运行git log …
我想使用git log指定我的存储库的路径来获取最后10次提交.我使用了选项-path,但我有"存储库外"错误
git log --no-merges -10 -p /home/my_folder/git/repo
fatal: /home/my_folder/git/repo: '/home/my_folder/git/repo' is outside repository
Run Code Online (Sandbox Code Playgroud)
该命令正在例如文件夹/ home中运行
/sf/answers/384556441/解释了如何为文件执行git log命令.有没有办法通过git log或其他git命令跟踪文件的一部分是如何更改的?(当然,这肯定会对git的diff引擎造成压力,因为部件的长度和行数会发生变化.但git在这方面相当不错.)
当我跑步时
> git log --oneline
Run Code Online (Sandbox Code Playgroud)
我得到的输出看起来像这样
abcdef0 (head, branch, origin/branch) comment
0987654 different comment
1234567 (different-branch, origin/branch) third comment
Run Code Online (Sandbox Code Playgroud)
但是,只要将输出通过管道传递到任何内容(例如> git log --oneline | cat),分支名称就消失了
abcdef0 comment
0987654 different comment
1234567 third comment
Run Code Online (Sandbox Code Playgroud)
这意味着我不能grep或添加行号或类似的东西。
(它也缺少颜色和less样式行为,但我今天不在乎这两种方式)
我可以通过命令行参数重新启用此功能吗?