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

时间:2018-12-14 04:27:11

标签: git

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

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

3 个答案:

答案 0 :(得分:1)

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

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} @`

,然后进行补丁提交以进行更改,根据需要切换和/或建立分支。一旦您对 that worfklow感到满意,甚至还有git checkout --merge,它以您当前的提示为基础运行即兴内容合并,解决小冲突比做起藏歌舞。

答案 1 :(得分:0)

我认为没有什么比这更清洁的了。如果您只想拉出几行或一个大的连续块并重新添加+提交,则取决于您要拉出的内容及其分散程度,git commit --amend可能会更简单。下次提交的一部分。

答案 2 :(得分:-1)

这是我能想到的最快的

  • 撤消这些行,然后git add .
  • git commit --amend --no-edit(假设您不会更改最后一个git commit消息)
  • 然后添加新提交所需的行。