我正在进行大规模的代码更改,并在我的存储库的分支上做了大量的提交。
在我工作的中间,我改进了一些与此更改无关的代码,并且我想立即提交拉取请求。
目前我的fork的树看起来像这样(为简单起见,使用字母代替commit id)
fork/master:
A -> B -> C -> D -> E
upstream/master:
A
选择更改C
并提交拉取请求的最简单方法是什么?
我尝试从我的叉子上的A分支,然后樱桃挑选C,但它也带来B变化。
我知道git将C视为A-B-C的路径而不是单个变更集...我的问题是你如何按下一个新的分支来回购一个具有C变化的拉取请求?目标是"提交拉取请求,从哪个新分支到上游/主人只有C更改并不重要"
然后我天真地尝试:git checkout fork/master
git diff A..C file_i_care_that_was_only_changed_on_C > patch
git checkout A
git checkout -b temp_for_pull
git apply < patch
# lots of errors. changes do not get applied.
想法?
答案 0 :(得分:0)
(请参阅上面的AndrewC评论,了解具有交互式rebase的解决方案。)
我必须经常这样做,所以我总是在重新审视这个...我的最新解决方案是使用
(为简单起见,再次使用字母而不是commitID)
git format-patch B...C [optional file list]
这将生成文件0001_C_commit_message.patch
然后,在A
:
git am 0001-b_to_c_changes.patch
现在,提交,推送,创建拉取请求。