[英]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
例如,假設在此方案中,上面的base
為D
剛跑步
git diff D'..M
還會給我合並提交G'
的結果。 我想避免這種情況,並且在任何數量的合並中都具有強大的功能。
因為git diff
關於比較兩個端點,而不是范圍
這可能是不可能的( git diff
將無法檢測到這些更改來自何處)。
您可以嘗試使用
$ git log -p --no-merges --first-parent D'..M
-p
給您列出的提交的差異(補丁) --no-merges
將排除列表中的合並 --first-parent
將僅跟隨第一個父母(您合並為例如private
父母) D'..M
將
包括從可到達的提交
<rev2>
但排除那些可達從<rev1>
一種不同的方法是遵循@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.