[英]diff branch changes in git relative to common ancestor
我發現自己經常處於一種情況,我想查看所有更改的差異,這是一個分支自分支以來引入的。 天真的
$ git diff ..branch
效果不佳,因為還考慮了master
中的更改。 我正在尋找的基本上是一種更好的跑步方式
$ git diff $(git merge-base master branch)..branch
或以圖形表示:
---A---B---C---D---E <== master
\
F---G---H <== branch
如何優雅地找到B
和H
之間的差異?
編輯:正如我在下面的回答中所指出的, master...branch
是我的問題的解決方案。 但是,鑒於引用的手冊頁片段,我仍然不知道為什么會這樣。
為什么diff master...branch
只顯示與合並基礎的差異,而man rev-parse
說,它也應該包括master
的提交?
為什么diff master..branch
顯示master
和branch
的當前狀態之間的差異,而man rev-parse
說,它應該忽略master
-only 提交?
在廣泛查看git help rev-parse
並進行試驗后,我發現了以下信息:
<rev1>..<rev2>
Include commits that are reachable from <rev2> but exclude those
that are reachable from <rev1>. When either <rev1> or <rev2> is
omitted, it defaults to HEAD.
<rev1>...<rev2>
Include commits that are reachable from either <rev1> or <rev2>
but exclude those that are reachable from both. When either <rev1>
or <rev2> is omitted, it defaults to HEAD.
不知何故,我總是有這樣的印象,那個master..branch
是我需要的,忘記了master...branch
(三個點)。
但是對它進行試驗表明,三點符號正是我正在尋找的:
$ git diff master...branch
僅顯示branch
相對於它從master
起飛的位置的差異。
我知道這不是您在這里尋找的答案,但它可能對其他人有所幫助。 使用像 gitk 這樣的圖形工具,您可以:
現在您可以在右側看到所有更新的文件,在左側看到所有修改過的行(每個文件)。
我正在尋找的基本上是一種更好的跑步方式
$ git diff $(git merge-base master branch)..branch
創建別名怎么樣?
git config alias.diffbr '!f() { git diff $(git merge-base master $1)..$1; }; f'
然后你可以簡單地做git diffbr branch
。
如果您希望別名可用於您機器上的所有存儲庫,請將--global
參數添加到git config
。
如果您要根據分支的位置檢查當前分支,只需添加...
。 所以命令看起來像
git diff master...
它與git diff master...HEAD
。 我正在運行 git 版本 2.17.1。 這在舊版本中可能會有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.