我有一个分支,很久以前我意外地合并了其他人的变化,现在有数百个文件出现在拉取请求中,而不是我的。
我想创建一个单独的分支,我想在这几十个提交中挑选自己的文件,这样我的新拉取请求只包含我的更改。
我发现了如何挑选提交,以及如何从一个特定的提交中挑选文件,但如何从一系列提交中挑选几个文件?
是否有更简单的解决方案?
答案 0 :(得分:1)
因此,如果我理解正确,首先要做的就是挑选范围,即git cherry-pick --no-commit
。然后,使用git reset
删除对索引的更改。然后git add
要提交的所有文件,git commit
这些文件,最后git checkout .
以消除其他本地更改。这将导致包含您的更改的单个扁平提交。
现在,如果您想要做的只是包含那些触及特定文件集的提交,您可能需要查看使用{this page底部的示例。 1}}将已触及特定文件规范的所有提交的列表提供给git rev-list
。因此,例如,如果您的所有文件都在cherry-pick
中, {/ em> mydir
之类的内容就应该这样做。
答案 1 :(得分:0)
如果您曾经合并过一次提交,那么您可以避免,然后使用git rebase
跳过合并提交。
-----origin/foo-------A----------------------------B----C----D
(where you merged in) (commits on top of that)
AFTER REBASE
-----origin/foo-------B'----C'----D'
(your commits, skipping A)
如果您的更改(上面的B
,C
和D
)确实触及了您要避免的文件,则需要使用git filter-branch
重写这些提交并避免更改这些文件。使用--tree-filter
命令,您可以重置您不想触摸的每棵树的部分。