给出一系列提交,例如
b9dc80c commit msg 1 #530
88a4d3c another commit
1010bce commit msg 2 #530
040ac6d commit msg 3 #530
6b72683 another commit
ed17416 another commit
f49bbbd commit msg 4 #530
我希望看到#530
提交中所有更改的差异。
到目前为止,我已经以一种方便的格式提供了所有适当的哈希值。
git log --oneline | grep #530 | awk -F" " '{print $1}' | xargs echo
# b9dc80c 1010bce 040ac6d f49bbbd
我可以以某种方式将这些提交“合并”为一个差异吗?也就是说,合并到内存中,而不会实际影响原始存储库。我知道我可以在一个单独的分支中挑选这些提交并进行区分,但这太复杂了。
用例是我想要查看指定了故障单ID的所有更改。
示例:
echo a > file
git add file && git commit "first"
echo b > file
git add file && git commit "second #XX"
echo a > file
git add file && git commit "third #XX"
the-special-command
我想到的是“diff”,“比较”#XX
提交应该提供空输出,而不是对file
进行两次单独的更改。
答案 0 :(得分:1)
有两种选择:
combinediff
命令。编辑:您可以使用log --grep
简化“log | grep”,并将其设为--format
的哈希值。
答案 1 :(得分:0)
为你找到的所有提交sha-1打印git show
输出是否适合你?:
git log --oneline | grep #530 | awk -F" " '{print $1}' | xargs git show --oneline
如果你想"合并"输出,你只需要提取不必要的提交元数据......
或其他更多"合并友好":
git log --oneline | grep a | awk -F" " '{print $1}' | xargs git show --pretty=format:
答案 2 :(得分:0)
这是一种略有不同的方法:
git checkout -b tempbranch b9dc80c
git rebase -i f49bbbd^
# remove all the commits that you don't want from the editor, and
# replace all the other "pick" commands except the first with "squash"
git log -1 -p
这将创建一个新分支,该分支最初包含与当前分支相同的提交序列。然后,在该分支上,rebase
将消除您不提交的提交
我希望并将其余的东西压在一起。然后git log -1 -p
步骤将
显示生成的补丁(您也可以使用git diff HEAD^ HEAD
或其他几个补丁
根据您的需要,您可以选择略微不同的输出
使用补丁)。请注意,根据每次提交的更改的性质,
您可能必须在rebase
期间解决一些冲突,但这不一定
异常...
完成此操作后,您可以放弃临时分支:
git checkout otherbranch
git branch -D tempbranch