【问题标题】:How to get the commits chain for a certain file如何获取某个文件的提交链
【发布时间】:2014-05-19 18:38:31
【问题描述】:

假设我有一个像这样的非常简单的分支

A -- B -- C -- D -- E
*         *         *

其中ACE更改了文件F(即B, DF无关)。我要做的是提取A, B, E,然后将它们重新组合到一个新的分支中:

A -- C -- E (new branch)

我不知道该怎么做或是否可能。谢谢。

【问题讨论】:

  • 您可以使用git filter-branch。请注意,无论您尝试什么,都会有效地创建与原始提交不兼容的不同提交 A、C 和 E。
  • @poke,请考虑将您的评论转换为答案,因为我认为这是git subtree 的唯一方法,它可以自动执行几乎此任务,适用于子目录(子树)而不是单个文件。所以是的,解决问题的一种方法是将E“克隆”到一个新分支中,并在其上运行正确检测的git filter-branch
  • @kostix 我想​​关闭这个问题。链接的问题显示了如何使用filter-branch 比我在这里可能重现的更详细。
  • @poke,您链接到的页面看起来非常详细,但是保留单个文件与保留子目录不同...比如说,您调用 git filter-branch --index-filter=... 并传递给它究竟是什么命令? git rm 不支持否定匹配(例如“除了匹配 *foo 之外的所有内容”)。

标签: git git-branch


【解决方案1】:

假设您不尝试自动化批量工作,普通命令可以正常工作:

git checkout --orphan  newbranch $A
# `git rm` everything but the one file here if that's really what you're after
git commit -a
git cherry-pick $C
git cherry-pick $E

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多