如何解决Git:如何引发仅包含文件子集不提交的选择性拉取请求
在正常的gitflow
之后,我有一个master
分支,出于发展目的,我从其中分支了一个feature
分支。在feature
分支中,我做了很多更改(添加了新文件),现在需要合并回到master
。请注意,feature
分支中的这些更改已经发生了几周,包含数百次提交。
但是,由于要求,我被允许采用文件子集,这些子集已在多个提交中进行了编辑/添加。
问题是-我该如何从feature
到master
发出仅包含上述文件子集的拉取请求,而忽略可能已添加/编辑的任何其他文件?
请注意,无法进行提交的GIT cherry pick
,因为
谢谢
解决方法
您想从feature2
创建一个新的master
,并仅在其中包含文件的子集,从中创建PR,对其进行测试和审查。
要从现有分支中的某些文件(而非提交)中创建这样的分支:
git checkout -b feature2 master
# optionally git rm any checked in files in master that shouldn't be there (were removed in feature)
git checkout feature -- <path> [ <path> ... ]
git commit
其中<path>
是您要包括的原始feature
分支中文件子集的路径。
其他选择可能是cherry-pick
,但为此您需要确定将那些文件添加到feature
分支的提交,并可能执行partial cherry-picks。
没有这样的事情。 Git在逐个提交的基础上工作。如果您的提交不是您想要的,则必须进行新的不同提交。
通常,执行此操作的方法是创建一个新分支,该分支的当前提交与您不喜欢的一组提交的起点相同(例如,也从master
的提示,然后从特定提交中显式提取特定文件,如blami's answer中所示。请注意,您在这里不需要git commit -a
。我个人认为使用git commit -a
是个坏习惯,因为在创建 new 文件时,这会给您带来麻烦。
(顺便说一下,请注意,每个提交都包含每个文件,或更准确地说,是您或任何人进行提交时Git知道的每个文件。这些文件都存储在一个特殊的,只读的,仅Git的,压缩和重复数据删除格式,因此feature
中的 last 提交可能与数百个以前的文件具有相同的副本。在feature
中提交意味着重复数据删除节省了大量空间。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。