繁体   English   中英

如何git rebase仅更改的文件

[英]How to git rebase only changed files

我想做一个HTML文件库的git rebase。 我有一个类似的仓库:

-- A -- B 
   \
    \-- C -- D -- E -- F

我想将F重新设置为B,但是我有一个问题,就是我不希望C。C引入了一项更改,该更改将所有 HTML文件中的文本重新排列。 我只希望这些提交中更改的文件来自D,E和F的更改。

因此,换句话说,我想要:

-- A -- B -- D' -- E' -- F'

例外:我希望最后一次提交包含git diff --name-only C..F返回的F的文件,以及B的其余文件。

对我不起作用的是:

git rebase --onto B D F

因为我必须进行混乱的合并,并手动选择所需的文件。 我可以添加-X theirs但是我从C中得到了我不想要的文件。

因此,我最糟糕的做法不是在B上创建一个新的自定义提交,然后在其中复制git diff --name-only C..F来自F的文件。

有更好的git方法吗?

(仅供参考,这是我不完全使用git的方法):

git diff --name-only C..F | xargs -I{} -n1 sh -c "git show F:{} > {}"

首先, git cherry-pick -n C -n表示将执行樱桃选择,但不提交。 然后进行所需的任何修改并提交。 我们将此新提交称为C1

然后git rebase --onto C1 CF 请注意,范围是排他的 它将基于C,但不包括C。结果是D到F。这在使用git rebase --onto master this that分支时更有意义- git rebase --onto master this that

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM