在上一次提交中,我在文件中添加了某些行,这些行应作为单独的提交添加。我该如何仅从提交中撤消那些行而不完全删除它们(因为以后我仍然需要添加它们)?
我知道我可以做git reset HEAD~1
来完全撤消提交,然后仅将我需要的行打上git add -p
补丁,然后再次提交。我实际上是在寻找一种更清洁的解决方案(如果存在)
答案 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消息)