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

rvpgvaaj  于 2023-01-19  发布在  Git
关注(0)|答案(4)|浏览(119)

我在上一次提交中添加了一个文件中的某些行,而这些行本应作为一个单独的提交来添加。我如何只撤销提交中的这些行而不完全删除它们(因为我以后还需要添加它们)?
我知道我可以做git reset HEAD~1来完全撤销提交,然后只添加我需要的行,然后再次提交。我实际上是在寻找一个更干净的解决方案(如果存在的话)

kkih6yb8

kkih6yb81#

这是我能想到的最快速度了。

  • 撤消这些行,然后git add .
  • git commit --amend --no-edit(假设你不会修改上一条git提交消息)
  • 然后添加新提交所需的行。
xzabzqsa

xzabzqsa2#

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

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

把他们送到那里
x一个一个一个一个x一个一个二个x
git commit -- path中有一个特殊的逻辑:"我不在乎索引是什么样子的,只提交我给你的特定路径的修改,忽略其他的一切。"它是专门为这样的情况而构建的,你修复了一些需要单独记录的东西。只需修复你面前的工作树,然后将修改直接发送到你想要记录的任何地方和任何方式。
顺便说一句,这也是rebase的一个方便快捷方式,要完全重构当前分支,您可以

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

然后对你的修改进行补丁提交,根据需要切换和/或创建分支。一旦你熟悉了 * 那个 * 工作流程,甚至还有git checkout --merge,它会以你当前的tip为基础运行一个即兴的内容合并,解决小冲突要比做隐藏和弹出的舞蹈容易得多。

gstyhher

gstyhher3#

我不认为还有什么比这更干净的了,取决于你对拉出的关注程度以及它是如何分散的,如果你只想拉出几行或者一大块连续的代码,并将它们作为下一次提交的一部分重新添加+提交,git commit --amend可能会更简单。

fiei3ece

fiei3ece4#

  1. git add-〉这将添加所有已修改的文件
  2. git commit --amend --no-edit-〉这将合并所有添加或移除到上一次提交的更改,而不更改消息

相关问题