只显示我修改过的 git diff

5

git diff commit_A commit_B 显示了在 AB 之间的所有差异。

在提交范围 A..B 中,有我自己提交的提交 --author=me 和其他人提交的提交 --author=someone else

有没有办法获取仅包含我个人累计变化的 AB 之间的 git diff,而排除其他人所做的更改?

我想象中一种潜在的解决方案是解析 git log --author=me 并为每个提交 "总和" 所有差异。另一个可能的想法是在点 B 处进行 git blame,并过滤掉在 AB 之间更改的行。

背景:

假设我正在花费很长一段时间开发一个大型功能。在此期间,我对子功能进行了多次提交。为了跟上最新的代码库,git pull 与其他贡献者的贡献创建了合并提交。我希望能够看到迄今为止我所做的累积更改,而不看到其他人的更改。假设没有合并冲突(我们触及代码的不同区域,但可能在同一文件中)。

3个回答

1

虽然不是完全相同,但非常接近:

git --no-pager log --name-only --oneline --author="John"

在这里,它将列出您完成的所有提交,并仅显示文件名。


1
有没有一种方法可以获取我在A和B之间累积更改的git diff,但排除其他人的更改?
直接来说,没有。
我想象中的一个潜在解决方案是解析git log --author=me,并将每个提交的diff“合并”在一起。
同样的想法,但我认为更容易实现(尽管我预计会经常遇到补丁无法正确应用的问题):从提交A开始创建一个临时分支,挑选出您想保留的每个提交(您自己或他们的提交),同时忽略您想跳过的提交,然后将最终结果与原始结果进行比较。满意diff后,丢弃临时分支。因此:
git checkout -b temp A
for commit in $(git rev-list A..B); do
    if want_commit $commit; then git cherry-pick $commit; fi
done
git diff A
git checkout realbranch; git branch -D temp

(不需要为临时分支命名:一个分离的 HEAD 将作为临时分支。上述主要是为了说明。)

我认为并不是所有的补丁都能够干净地应用。 - arcyqwerty

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接