簡體   English   中英

git 中相對於共同祖先的差異分支變化

[英]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

如何優雅地找到BH之間的差異?

編輯:正如我在下面的回答中所指出的, master...branch是我的問題的解決方案。 但是,鑒於引用的手冊頁片段,我仍然不知道為什么會這樣。

為什么diff master...branch只顯示與合並基礎的差異,而man rev-parse說,它也應該包括master的提交?

為什么diff master..branch顯示masterbranch的當前狀態之間的差異,而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 這樣的圖形工具,您可以:

  • 打開 gitk
  • 單擊H,右鍵單擊並選擇“標記此提交”
  • 單擊 B,右鍵單擊並選擇“區分此 -> 標記提交”

現在您可以在右側看到所有更新的文件,在左側看到所有修改過的行(每個文件)。

我正在尋找的基本上是一種更好的跑步方式

$ 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.

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