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

标签 git

我在一个只有一次提交的功能分支上(由于交互式 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/

相关文章:

git - 忽略文件 : gitignore does not do what I want

git - 无法删除本地git分支

svn - 如果 GIT 不跟踪文件重命名,我们如何避免在 merge 中丢失这些更改?

git - TeamCity 存储库 X 在路径 'X' 的提交 'X' 中有一个子模块,但在 .gitmodules 配置中没有此路径的条目

svn - 我使用 git-svn 导入到 git 中的 svn 存储库已经移动

git - 如何使用 git-lfs 跟踪具有正确行结尾规范化的文本文件?

git - 如何在 GitHub 上管理存储库

git - 不忽略子目录中的文件?

git push heroku master 权限在 VISTA 上被拒绝

git - 将分支分解为单个文件提交