git - 如何从上次提交中删除某些行并将它们添加到 git 中的新提交中?

标签 git

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

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

最佳答案

@~ 的一些更改不应该在 @但是在另一个分支中,因此请在此处重置它们:

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 中有特殊情况逻辑上面写着“我不在乎索引是什么样子,只提交对我给你的特定路径的更改,而忽略其他所有内容”。它是专门为这样的情况而构建的,在这种情况下,您修复了需要单独录制的内容。只需修复工作树中摆在您面前的内容,然后将更改发送到您想要记录的任何位置和方式。

顺便说一句,这也是 rebase 的一个方便快捷方式,可以完全重构您当前的分支
git reset --soft `git merge-base @{u} @`

然后为您的更改做补丁提交,根据需要切换和/或创建分支。一旦你对那个工作流感到满意,甚至还有 git checkout --merge ,它以您当前的提示为基础运行即兴内容 merge ,解决小冲突明显比进行 stash 和流行舞蹈更容易。

关于git - 如何从上次提交中删除某些行并将它们添加到 git 中的新提交中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53773511/

相关文章:

git push 和 commit 在 Vscode 中不起作用

git - 在gradle中的一组文件上运行pmd

git - circleci checkout 是否从 master 或特定提交的代码中提取最新代码

git - 为什么 "git push origin @"不起作用?

git - 显示所有分支的 git 前后信息,包括远程

GIT - 在单独的分支上重写核心代码

git - 从 Git 项目中更新 CVS 模块

ruby-on-rails - 推送到 Heroku 时无法从远程存储库读取(Rails 教程 5)

git - 致命的 : fsync error on git/repo/path

Git: merge 到master,然后推回到所有分支