如何从Git Bash中的git log管道输出?

时间:2018-04-24 07:50:09

标签: bash git

原因:我想使用difftool比较两个任意不同的提交。我知道搜索中的哈希值,我不想复制这些哈希值,因此我正在寻找一个像

这样的命令
$ log_str=$(git log --all -S"new_tour <-" --pretty=format:"%h")
$ git difftool -t kdiff3 log_str[1] log_str[2] myfile.txt
  • 我希望能够解决任意指数 - 并不总是1和2
  • 如果答案也提示,如何弄明白,log_str的结构是什么,那将会很棒。这是一个角色吗?一个字符数组?一个列表? ......使用Bash。

我找到了一些相关的帮助herehere,但我无法使其发挥作用 现在我做:

$ git log --pretty=format:"%h"
3f69dc7  
b8242c6  
01aa74f  
903c5aa  
069cfc5  

$ git difftool -t kdiff3 3f69dc7 b8242c6 myfile.txt

1 个答案:

答案 0 :(得分:2)

我会使用临时文件采取两步法:

git log --all -S'SEARCH' --pretty=format:"%h" > tmp_out
git diff "$(sed -n '1p' tmp_out)" "$(sed -n '2p' tmp_out)" myfile.txt
rm tmp_out

sed用于显示文件的第1行和第2行。

使用变量:

search="foo"
index_a="1"
index_b="2"
file="myfile.txt"
git log --all -S"${search}" --pretty=format:"%h" > tmp_out
git diff "$(sed -n "${index_a}p" tmp_out)" "$(sed -n "${index_b}p"  tmp_out)" "${file}"
rm tmp_out

在bash函数中:

search_diff() {
    search="${1}"
    index_a="${2}"
    index_b="${3}"
    file="${4}"
    git log --all -S"${search}" --pretty=format:"%h" > tmp_out
    git diff "$(sed -n "${index_a}p" tmp_out)" "$(sed -n "${index_b}p" tmp_out)" "${file}"
    rm tmp_out
}

search_diff "foo" 2 3 myfile.txt