繁体   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