用例。我提交了一个包含许多更改的文件,但我忘记为一个更小的附带任务创建一个新的提交 - 清除文件中我发现的一些个人过期电子邮件,这与更大的任务无关。为了保持 git 工作流程的整洁,电子邮件的清理应该在第二次提交中进行。我现在需要将一个提交拆分为两个提交,这意味着也要拆分代码更改。
在 codium/vscode 的窗格中Source Control
,
在COMMIT
标签中,
我选择需要恢复其中几行“错误”内容(其中包含错误的个人电子邮件)的文件 (server.py)。我可以看到git diff
旧文件和新文件(最新提交前后)之间的某种可视化效果。
现在我不想将错误的电子邮件从“旧文件”复制并粘贴回工作文件。
有没有办法使用 codium/vscode 的 git 功能将仅针对选定行的提交改回(撤消、编辑、取消暂存,不确定这里最好的词是什么)?
答案1
到目前为止还没有这种工具,但将来可能会成为一个功能?
你似乎无法逐行执行此操作 - 只有在发生冲突时才有可能,最好使用带有其三路合并编辑器自版本 1.69.0(2022 年 6 月发布)以来。但是,该编辑器无法删除有冲突的行,同时将这些删除的行添加到新文件中,而这正是这里所需要的。
解决方法
在根提交之后创建一个新的提交,该提交仅包含小更改,并且紧接在“完整文件提交”之前。如果您随后转到包含完整文件的后续提交,则小更改已经完成。这甚至不是一种解决方法,因为从问题一开始就很清楚,但似乎没有其他答案:您必须检查所有小更改并对其进行新的小提交。如果它不仅仅是一些自动样式更改,而是各种电子邮件更改,您可能需要逐一检查,就像在这种情况下一样,这可能会花费很多工作。
为了使这一步稍微简单一点,你仍然可以通过以下方式合并完整文件和根文件:三路合并编辑器。然后添加小的更改用手将上面的完整文件复制并粘贴到下面的第三个窗口中(=您的新“小提交”),最后将第三个窗口保存为新文件。
这个截图并不是这里的意思,因为它正在处理一条有冲突的线路,但它显示你可以在下面的文件窗口中手动更改内容:
主意
为了明确这里需要什么答案,将工作台与它的三路合并编辑器,你会有一个第三/第四复选框(每侧一个)将撤消所选文件中的步骤,使其恢复到根提交的状态,并且然后将撤消的步骤保存到新的第三个文件中,该文件中包含撤消的提交行。因此,不仅有这三向合并步骤(如下所示),还有三向分裂步骤。
到目前为止,该工具中还没有以下内容: