簡體   English   中英

"git diff 只有我的更改"

[英]git diff only my changes

git diff commit_A commit_B<\/code>向我展示了A<\/code>和B<\/code>之間的所有差異

在提交 A..B 的范圍內,有提交A..B<\/code> --author=me<\/code>和--author=someone else<\/code>

有沒有辦法為我<\/strong>在A<\/code>和B<\/code>之間的累積變化獲取git diff<\/code> ,不包括其他人的變化?

我想一個潛在的解決方案是解析git log --author=me<\/code>並將每次提交的差異“求和”在一起。 另一個潛在的想法可能是在B<\/code>點接受git blame<\/code>並按在A<\/code>和B<\/code>之間更改的行進行過濾。

語境:

假設我在很長一段時間內致力於一項大型功能。 在這項工作中,我提交了許多子功能。 為了跟上最新的代碼庫, git pull<\/code>與其他貢獻者的貢獻創建合並提交。 我希望能夠看到我迄今為止所做的累積更改,而無需查看其他所有人的更改。 假設沒有合並沖突(我們接觸不同的代碼區域,但可能在同一個文件中。

有沒有辦法獲得 A 和 B 之間累積更改的 git diff,不包括其他人的更改?

不直接,不。

我想一個潛在的解決方案是解析 git log --author=me 並將每次提交的差異“求和”在一起。

相同的想法,但我認為更容易實現(盡管我希望補丁沒有正確應用的常見問題):從提交A開始創建一個臨時分支,挑選你想要保留的每個提交(你的或他們的),同時忽略您想跳過的那些,然后將最終結果與原始結果進行比較。 一旦對差異感到滿意,就丟棄臨時分支。 因此:

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 將作為臨時分支。以上主要是為了說明。)

不是同一件事,但非常接近:

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

您可以使用分支來執行此操作(從上下文中聽起來您的分支沒有合並到主分支中)。

這條評論解釋了這一點: git diff 只顯示修訂版/分支 A 領先於修訂版/分支 B 的提交

因此,如果您的分支是從分支 A 出來的 B,您可以運行:

git diff A...B

或者干脆:

git diff A...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM