我在上一次提交中添加了一个文件中的某些行,而这些行本应作为一个单独的提交来添加。我如何只撤销提交中的这些行而不完全删除它们(因为我以后还需要添加它们)?我知道我可以做git reset HEAD~1来完全撤销提交,然后只添加我需要的行,然后再次提交。我实际上是在寻找一个更干净的解决方案(如果存在的话)
git reset HEAD~1
kkih6yb81#
这是我能想到的最快速度了。
git add .
git commit --amend --no-edit
xzabzqsa2#
对@~的某些更改不应在@中,而应在另一个分支中,因此在此处重置它们:
@~
@
git reset -p @~ -- that/file git commit
把他们送到那里x一个一个一个一个x一个一个二个xgit commit -- path中有一个特殊的逻辑:"我不在乎索引是什么样子的,只提交我给你的特定路径的修改,忽略其他的一切。"它是专门为这样的情况而构建的,你修复了一些需要单独记录的东西。只需修复你面前的工作树,然后将修改直接发送到你想要记录的任何地方和任何方式。顺便说一句,这也是rebase的一个方便快捷方式,要完全重构当前分支,您可以
git commit -- path
git reset --soft `git merge-base @{u} @`
然后对你的修改进行补丁提交,根据需要切换和/或创建分支。一旦你熟悉了 * 那个 * 工作流程,甚至还有git checkout --merge,它会以你当前的tip为基础运行一个即兴的内容合并,解决小冲突要比做隐藏和弹出的舞蹈容易得多。
git checkout --merge
gstyhher3#
我不认为还有什么比这更干净的了,取决于你对拉出的关注程度以及它是如何分散的,如果你只想拉出几行或者一大块连续的代码,并将它们作为下一次提交的一部分重新添加+提交,git commit --amend可能会更简单。
git commit --amend
fiei3ece4#
git add
4条答案
按热度按时间kkih6yb81#
这是我能想到的最快速度了。
git add .
git commit --amend --no-edit
(假设你不会修改上一条git提交消息)xzabzqsa2#
对
@~
的某些更改不应在@
中,而应在另一个分支中,因此在此处重置它们:把他们送到那里
x一个一个一个一个x一个一个二个x
git commit -- path
中有一个特殊的逻辑:"我不在乎索引是什么样子的,只提交我给你的特定路径的修改,忽略其他的一切。"它是专门为这样的情况而构建的,你修复了一些需要单独记录的东西。只需修复你面前的工作树,然后将修改直接发送到你想要记录的任何地方和任何方式。顺便说一句,这也是rebase的一个方便快捷方式,要完全重构当前分支,您可以
然后对你的修改进行补丁提交,根据需要切换和/或创建分支。一旦你熟悉了 * 那个 * 工作流程,甚至还有
git checkout --merge
,它会以你当前的tip为基础运行一个即兴的内容合并,解决小冲突要比做隐藏和弹出的舞蹈容易得多。gstyhher3#
我不认为还有什么比这更干净的了,取决于你对拉出的关注程度以及它是如何分散的,如果你只想拉出几行或者一大块连续的代码,并将它们作为下一次提交的一部分重新添加+提交,
git commit --amend
可能会更简单。fiei3ece4#
git add
-〉这将添加所有已修改的文件git commit --amend --no-edit
-〉这将合并所有添加或移除到上一次提交的更改,而不更改消息