我正在使用单个提交的功能分支(由于交互式rebase压缩了我的所有提交)。
我已经决定,在推送到origin并创建一个pull请求之前,我想在该提交中获取更改的一部分(在文件级别)并从中进行第二次提交,因为它们'在逻辑上分离问题。我怎么能这样做?
我想要突破的变化从来没有在它自己的提交中,它只是捆绑到我在功能分支上的工作的第一次提交。
答案 0 :(得分:4)
将一些更改从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
-p
的{{1}}选项可让您选择帅哥进行投放。请注意,您可以拆分帅哥,并对行进行精细控制。
第一次提交后,您可以继续添加尚未处理(未暂存)的更改。
答案 1 :(得分:3)
首先,确保您的工作目录没有任何挂起的更改。如果您要保留更改,请使用git stash
。
使用git reset
将存储库“向后”移动到上一次提交:
$ git reset HEAD^
这不会对您的工作文件进行任何更改,但它会将角色备份回存储库状态,以便任何属于该提交的内容现在都会显示为已修改。
现在,使用git add
添加您希望成为单独提交一部分的更改。暂存更改后,请使用git commit
提交这些更改。
现在,添加所有其他剩余的更改,然后提交这些更改。
现在,您已将之前的单个提交拆分为两个单独的提交。