我正在开发一个项目,其中大量代码从C转换为C ++。在转换过程中,多个提交中删除了export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME="/usr/local/cuda"
关键字的多个实例。
现在,我想撤消restrict
关键字的所有删除,但问题是负责删除的提交也引入了一些有用的更改。有没有办法创建一个补丁,只会删除restrict
关键字的删除(在整个历史记录中),但没有别的?
答案 0 :(得分:1)
查找尚未删除<id>
的最新提交restrict
。
从最新的提交,到C ++的端口完成,运行
$ git checkout -p <id>
将以交互方式提示您反向应用各个更改。
输入restrict
拒绝与n
无关的所有帅哥,输入restrict
接受与y
相关的所有帅哥。如果您很勇敢且有必要,请输入e
进入大块编辑模式。您应该可以使用restrict
直接跳转到包含/
的黑客。
如有必要,请在事后进行手动清理。
根据分阶段更改创建新提交,希望根据需要恢复restrict
的所有出现。
如果这变得过于繁琐,您可以使用q
中止交互式部分,并创建一个包含目前为止完成的工作的提交。您可以随时将它们压缩为单个,干净的提交。
假装永远不会删除restrict
个关键字:
与上述相同
从最新的提交中,创建一个新分支(为了不丢失原始分支),并将端口重新绑定到C ++:
$ git checkout -b restore-restrict
$ git rebase -i <id>
使用restrict
标记删除了edit
个关键字的所有提交。
对于要编辑的每个提交,请通过手动编辑文件或restrict
恢复git checkout -p HEAD^
(类似于第一种方法,仅适用于单独提交)。然后,
$ git commit --amend
$ git rebase --continue