【发布时间】:2016-08-18 14:23:54
【问题描述】:
我想使用git cherry 显示所有提交到特定分支但在主分支中丢失的提交,并使用漂亮的格式记录。
我试过了:
git cherry master branch_name | grep "^+" | sed 's/^+ //' | xargs -I {} git --no-pager log --pretty=format:'%h,%an,%d,%ae,%ad,%s' --date=short -1 {}
这样做是为了:
-
git cherry master branch_name- 在终端中逐行列出所有在 branch_name 中而不在 master 中具有代码的提交的哈希值,反之则在哈希值前加上 + 或 - 号。 grep "^+"- 仅获取以 + 开头的那些(实际上是 master 中从 branch_name 中缺少的那些)sed 's/^+ //'- 从行中删除+,这样我们就可以只获取哈希值了。xargs -I {} git --no-pager log --pretty=format:'%h,%an,%d,%ae,%ad,%s' --date=short -1 {}- 将每个哈希作为参数传递给 git log 以显示每个哈希的格式化日志。这里--no-pager表示退出 git 日志窗口,-1表示仅显示 1 次提交。
这样做的问题是,它开始将 git cherry 返回的每个散列的每个结果连接到同一行。它不会逐行执行,因此我可以复制粘贴它们,也可以使用... > tmp.csv 将它们保存到 csv 文件中。
不知道除了xargs 是否还有其他我可以使用的东西,或者这实际上是 git log 的问题并且这不起作用。
我错过了什么?我做错了什么?
谢谢大家,很抱歉成为菜鸟。
【问题讨论】:
-
您可以在 xargs 之前将
| tr ' ' '\n'添加到您的管道中以用换行符替换空格吗? (或者用空值替换,并使用xargs -0。) -
在格式字符串的末尾添加
%n作为换行符。 -
@Mort
tr在这里如何提供帮助,没有空格,sed会处理这个问题。 -
@ElpieKay 没错,这是解决此问题的一种方法,但我实际上正在寻找解释为什么会发生这种情况以及什么是更好的方法。无论如何,感谢您快速修复我当前的设置。
-
@RaduM 似乎是由
--no-pager引起的。
标签: git command-line-interface branching-and-merging xargs git-cherry