将一些更改从Git提交移动到单独的提交中

时间:2016-04-19 20:25:51

标签: git

我正在使用单个提交的功能分支(由于交互式rebase压缩了我的所有提交)。

我已经决定,在推送到origin并创建一个pull请求之前,我想在该提交中获取更改的一部分(在文件级别)并从中进行第二次提交,因为它们'在逻辑上分离问题。我怎么能这样做?

我想要突破的变化从来没有在它自己的提交中,它只是捆绑到我在功能分支上的工作的第一次提交。

2 个答案:

答案 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提交这些更改。

现在,添加所有其他剩余的更改,然后提交这些更改。

现在,您已将之前的单个提交拆分为两个单独的提交。