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