首页 > 解决方案 > 如何从上次提交中删除某些行并将它们添加到 git 中的新提交中?

问题描述

在我的最后一次提交中,我在文件中添加了某些行,这些行应该作为单独的提交添加。如何仅撤消提交中的那些行而不完全删除它们(因为我以后仍然需要添加它们)?

我知道我可以git reset HEAD~1完全撤消提交,然后git add -p只添加我需要的行,然后再次提交。我实际上是在寻找一种更清洁的解决方案(如果存在的话)

标签: git

解决方案


一些更改@~不应该@在另一个分支中,所以在这里重置它们:

git reset -p @~ -- that/file
git commit

在那里提交

git checkout another
git commit -p -- that/file
git checkout @{-1}    # aannd we're back

有一种特殊的逻辑git commit -- path说“我不在乎索引是什么样子,只提交对我给你的特定路径的更改,而忽略其他所有内容”。它专为此类情况而构建,您可以在其中修复需要单独记录的内容。只需在工作树中修复您面前的内容,然后将更改发送到您希望记录的任何位置。

顺便说一句,这也是变基的便捷捷径,可以完全重构当前分支

git reset --soft `git merge-base @{u} @`

然后根据需要为您的更改、切换和/或创建分支进行补丁提交。一旦您worfklow 感到满意,甚至git checkout --merge会以您当前的提示为基础运行即兴内容合并,与进行 stash-and-pop 跳舞相比,解决小冲突明显容易得多。


推荐阅读