我在一个只有一次提交的功能分支上(由于交互式 rebase 压缩了我所有的提交)。
我已经决定,在推送到原点并创建 pull 请求之前,我想在该提交中获取一部分更改(在文件级别)并从中进行第二次提交,因为它们'重新逻辑上分开的问题。我该怎么做?
我想要突破的更改从来不在它自己的提交中,它只是捆绑到我作为功能分支工作的一部分所做的第一次提交中。
最佳答案
Move some changes from a Git commit into a separate commit
简而言之:重置最后一次提交并进行 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。请注意,您可以拆分大块并很好地控制要上演的台词。
第一次提交后,您可以继续添加仍在等待(未暂存)的更改。
关于git - 将一些更改从 Git 提交移动到单独的提交中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728753/