我目前处于一个特性分支上,只有一次提交(这是通过交互式变基将所有提交压缩而来的结果)。
在推送到源并创建拉取请求之前,我决定从该提交中选取一部分变更(在文件级别上)并将其制作为第二个提交,因为它们是逻辑上分离的问题。我该如何做呢?
我想要分离出的更改从未在自己的提交中进行过,它只是作为我特性分支工作的第一次提交被捆绑在了一起。
我目前处于一个特性分支上,只有一次提交(这是通过交互式变基将所有提交压缩而来的结果)。
在推送到源并创建拉取请求之前,我决定从该提交中选取一部分变更(在文件级别上)并将其制作为第二个提交,因为它们是逻辑上分离的问题。我该如何做呢?
我想要分离出的更改从未在自己的提交中进行过,它只是作为我特性分支工作的第一次提交被捆绑在了一起。
将一些Git提交中的更改移动到单独的提交中
简而言之:重置最后一个提交并创建2个新提交
如果我理解正确,你想保留原始提交中的大部分更改,并将其中的一小部分更改放入第二个提交中。 如果是这种情况,则首先要进行软重置最后一个提交(感谢@hvd的提示):
git reset --soft HEAD^
这将移除最后一个提交,但不移除更改,就像提交从未发生过一样,而所有更改都已暂存。此时,您希望取消暂存不需要在第一次提交中的文件。
您可以逐个取消暂存文件或按目录取消暂存,如下所示:
git reset -- path/to/file-or-dir
git add -p
有选择地暂存更改,就像这样:git reset -- path/to/file
git add -p path/to/file
git add
的-p
选项可以让您选择要暂存的hunks。请注意,您可以拆分hunks并对要暂存的行进行精细控制。git stash
。git reset
将存储库“后退”到上一个提交:$ git reset HEAD^
这不会改变你的工作文件,但它将回滚存储库状态,以便该提交的任何内容现在都会显示为已修改。
现在,使用git add
添加你希望成为单独提交的更改。一旦你的更改被暂存,使用git commit
提交这些更改。
现在,添加所有其余的更改,然后再次提交。
现在,你已经将以前的单个提交分成了两个单独的提交。
git reset --soft @^
将所有内容保留为暂存更改,或者像 larsks 的答案中已经直接取消暂存。 - user743382git reset --soft HEAD^
。 - Melroy van den Berg