Git 将一个提交分解为多个提交

Git 将一个提交分解为多个提交,git,gitkraken,Git,Gitkraken,让我先说清楚:我压扁、承诺,并将分支中的每一项承诺推向公共历史。公共历史上只有一次犯罪。我的工作目录是干净的。任何文件都没有更改 现在,我想将一个提交拆分为多个,以便在不必要地更改任何文件的情况下重新创建历史记录 我目前正在使用GitKraken,因此建议使用它将不胜感激。它没有像git commit-allow empty那样实现完整的特性集。没什么,但我可以访问命令行来执行它不直接支持的任何操作。使用命令行git将单个提交拆分为多个提交例如: 可选:git分支backupBranchName

让我先说清楚:我压扁、承诺,并将分支中的每一项承诺推向公共历史。公共历史上只有一次犯罪。我的工作目录是干净的。任何文件都没有更改

现在,我想将一个提交拆分为多个,以便在不必要地更改任何文件的情况下重新创建历史记录


我目前正在使用GitKraken,因此建议使用它将不胜感激。它没有像git commit-allow empty那样实现完整的特性集。没什么,但我可以访问命令行来执行它不直接支持的任何操作。

使用命令行git将单个提交拆分为多个提交例如:

可选:git分支backupBranchName

如果您担心会犯错误并丢失工作,或者希望能够轻松地从更改中恢复,请首先备份您的分支

git复位头^ 撤消当前提交,同时通过软重置保留更改。以前提交的更改现在将成为未老化的更改

git添加补丁。 选择要形成第一次提交的更改的第一个子集,并将其分阶段提交。如果它们已按文件分割,则可以轻松选择要暂存的文件。更有可能的是,您希望拆分的同一文件可能有不相关的更改。在这种情况下,您可以使用-p或-patch参数以交互方式选择要添加的大块。您可能需要拆分大块以获得正确的更改集。如果独立的更改不能修改代码的类似部分,这就足够了。如果独立更改修改了同一行,则可能需要在源代码编辑器中临时编辑这些行

git存储保持索引 测试您的更改。您可能希望验证已转移的更改集,以确保代码仍然正确构建,并且任何单元测试都通过。要做到这一点,您需要暂时隐藏未添加到当前提交中的更改。已经进行的更改应该保留,以便现在可以构建和测试它们

git提交 创建新的提交

吉特隐藏流行音乐 取消搁置其余更改并从步骤2继续拆分


正如你已经推动的那样,一旦你完成上述步骤,你的新作品的历史将会不同。这意味着您不能简单地将其推送到同一个分支,因为Git将拒绝更改。您可能希望将更新作为新分支推送。或者,在执行此操作之前,您需要仔细考虑很久,您可以强制推动分支覆盖远程存储库中的历史记录,但只有在不影响在同一存储库中工作的其他人(他们可能已经构建了旧的历史记录)时,才可以执行此操作。力推动常常被认为是一种不良的行为,所以要仔细考虑什么时候实际使用它。更标准的做法是推送一个新分支,打开一个新的拉请求,然后关闭任何旧的拉请求。

Git已经成为历史。您想添加什么内容?这些标记的部分是用来表示什么的?我想您的意思是希望将一个提交分解为多个提交,这样多个提交的总体效果与原始提交的效果相同。@DanielStevens Yes。考虑到这一点,有没有一种方法可以在不实际更改文件行的情况下选择已更改的文件行?所以他们出现在diff里了edit@DanielStevens参见编辑