如果我有一个尚未被推送到源的提交哈希,我怎么才能为该提交生成一个补丁.我想使用git log -p --no-names但无法看到交换机传递特定的提交哈希.我应该使用不同的git命令吗?
嘿伙计们,我现在通过使用下面的内容获取某个提交哈希的提交消息
hash='b55da97'
git log --pretty=oneline ${hash} | grep "${hash}" | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)
这些看起来效率极低,是否有更聪明更便宜的方法,或者我坚持使用grepping和awking?
以下命令在控制台上输出以下文本行
git log --pretty=format:"%h;%ai;%s" --shortstat
ed6e0ab;2014-01-07 16:32:39 +0530;Foo
3 files changed, 14 insertions(+), 13 deletions(-)
cdfbb10;2014-01-07 14:59:48 +0530;Bar
1 file changed, 21 insertions(+)
5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz
772b277;2014-01-06 17:09:42 +0530;Qux
7 files changed, 72 insertions(+), 7 deletions(-)
Run Code Online (Sandbox Code Playgroud)
我有兴趣让上面的格式像这样显示
ed6e0ab;2014-01-07 16:32:39 +0530;Foo;3;14;13
cdfbb10;2014-01-07 14:59:48 +0530;Bar;1;21;0
5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz;0;0;0
772b277;2014-01-06 17:09:42 +0530;Qux;7;72;7
Run Code Online (Sandbox Code Playgroud)
这将在某些报告中使用,该报告可以解析以分号分隔的值.事情是文本"\n 3 files changed, 14 insertions(+), 13 deletions(-)"(包括新行)被转换为3;14;13(没有新行)一个可能的角落案例是文本"5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz",其中没有这样的行.在那种情况下我想要;0;0;0
总体而言,目标是分析一段时间内的文件更改统计信息.我阅读了git日志文档,但找不到任何可以帮助我以这种格式呈现的格式.我提出的最好的是上面提到的命令.
因此,任何可以生成预期格式的命令或shell脚本都会有很大帮助.
谢谢!
我很好奇线条颜色的含义是git log --graph什么?
是的,我问的是在控制台输出的左边缘| / \连接提交的行*.
问题#1
这些颜色有一些隐藏的含义吗?
或者它们是伪随机选择的?
问题#2
有时重叠(但断开连接)的行具有相同的颜色.
例如,请参见上面屏幕截图中的紫色线条:
a55到e1c3c1到043 是否有可能要求git明智地选择颜色以避免孤立(没有共同提交)相同的颜色线重叠?
我希望图表更容易阅读.
我使用以下命令检查X提交:
git log --author=<my-name> -<X>
Run Code Online (Sandbox Code Playgroud)
但问题是我不小心从另一个存储库中提取代码,并将提交从存储库添加到我的本地git存储库.
所以我不能使用上面的命令,因为新的提交包含一些其他作者.
我一直在尝试使用
git log --no-merges --cherry-pick --right-only master...my-branch
Run Code Online (Sandbox Code Playgroud)
生成my-branch中但不在master中的提交列表(根据git-log文档).但是,列表中仍有许多等效的提交.如果我显示它们和它们的补丁,除了commit id之外没有区别.
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 >patcha
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 >patchb
diff patcha patchb
1c1
< commit 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
---
> commit c53c7c32dcd84bfa7096a50b27738458e84536d5
Run Code Online (Sandbox Code Playgroud)
甚至将git patch-id它们视为等效:
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b c53c7c32dcd84bfa7096a50b27738458e84536d5
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
Run Code Online (Sandbox Code Playgroud)
怎么不git log --cherry-pick把这些作为重复?
这是我的问题.如何获取特定路径的2个修订号之间的所有日志消息?让我通过例子解释.
我试着用这一行写它:
git -dir=/home/Desktop/GIT_REFERENCE_REPOSITORIES/manager.git log 10000...15000
Run Code Online (Sandbox Code Playgroud)
我假设它给了我与manager.git相关的10000到15000个修订版的日志消息.但事实并非如此.有人帮我吗?
如何命令git log -p,git show以及git diff相关的,为什么会被一个比另一个使用?
鉴于有以下4个提交的回购:
commitd - last commit
commitc
commitb
coomita - initial commit
以下git命令之间有什么区别?:
git log -p commitb commitd
git show commitb commitd
git diff commitb commitd
git log -p commitd commitb
git show commitd commitb
git diff commitd commitb
git log -p commitb..commitd
git show commitb..commitd
git diff commitb..commitd
git log -p commitd..commitb
git show commitd..commitb
git diff commitd..commitb
git log -p commitb...commitd
git show commitb...commitd
git diff commitb...commitd
git …Run Code Online (Sandbox Code Playgroud) 我尝试git logw/--decorate和--source选项.但仍然无法提交的支行名称 2f3cb60和 d7e7776,为什么呢?
#git log 2f3cb60 --graph --decorate --source --all --oneline
...
* | | | 1920ad5 refs/heads/gpio support gpio lib
| |/ /
|/| |
* | | 2f3cb60 2f3cb60 fix
* | | d7e7776 2f3cb60 fix
| |/
|/|
* | aa4dcfb refs/remotes/origin/httpd support
* | cfc839d refs/remotes/origin/httpd add folder
Run Code Online (Sandbox Code Playgroud)
如何显示带分支名称的git日志?
我需要编写一个脚本,逐步跟踪从git仓库添加和删除的文件和目录.
我试过用:
git log -n1 --pretty="format:" --name-only
Run Code Online (Sandbox Code Playgroud)
但这只能告诉我哪些文件已提交.它没有指定是添加还是删除.
有任何想法吗?
git ×10
git-log ×10
awk ×1
bash ×1
cherry-pick ×1
git-branch ×1
git-commit ×1
git-diff ×1
git-show ×1
graph ×1
grep ×1
patch ×1
shell ×1