簡體   English   中英

查找在分支中專門更改的文件

[英]Find files that changed specifically in a branch

我有一個git存儲庫,我通常在其中工作兩個分支,一個public分支和一個private分支,后者緊隨公共分支,但還有一些額外的添加。

自給定提交以來,是否存在找到專用於私有分支的更改的方法?

我能想到的最接近的方法是:

git diff base..public > pub.diff
git diff base..private > private.diff
interdiff pub.diff private.diff

這行得通,但並不是那么健壯,而且我確信可以用更好的方式用git做到這一點。

本質上是分支的外觀(具有更多合並):

...A---B---C---D---E---F---G---H public
    \           \           \
     A'--I---J---D'--K---L---G'--M private

例如,假設在此方案中,上面的baseD 剛跑步

git diff D'..M

還會給我合並提交G'的結果。 我想避免這種情況,並且在任何數量的合並中都具有強大的功能。

因為git diff

關於比較兩個端點,而不是范圍

這可能是不可能的( git diff將無法檢測到這些更改來自何處)。

您可以嘗試使用


選項A

$ git log -p --no-merges --first-parent D'..M
  • -p給您列出的提交的差異(補丁)
  • --no-merges將排除列表中的合並
  • --first-parent將僅跟隨第一個父母(您合並為例如private父母)
  • git revisision中解釋的D'..M

    包括從可到達的提交<rev2>但排除那些可達從<rev1>


選項B

一種不同的方法是遵循@torek的建議並創建一個臨時分支, cherry-pick所有提交cherry-pick ,然后查看該分支的差異。

由於在指定提交范圍時AFAIK git cherry-pick無法跳過提交,因此您首先需要獲取用於櫻桃選擇的提交列表 (在這里, 選項A很有用)

$ git log --no-merges --first-parent D'..M --pretty=format:%H
  • --pretty=format:%H將以長格式打印所有提交哈希

創建時間分支(需要具有正確的起點)

$ git checkout -b temp D'

然后手動選擇那些提交嘗試使用此命令(已替換為@torek建議的更好的命令)

$ git cherry-pick $(git rev-list --reverse --topo-order --no-merges --first-parent D'..M)
  • --reverse用於反轉打印的提交順序(從最舊到最新,而不是相反)
  • --topo-order這樣可以避免時間戳奇怪或錯誤的提交問題
  • --no-merges跳過合並提交
  • --first-parent跟隨主線分支(例如合並的分支)

如果提交基於合並到其中的更改,則此方法可能會失敗

暫無
暫無

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

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