尝试对合并的功能分支的现有提交进行修改的正确方法是什么?

What is the right way to try to make a revision to an existing commit of a merged feature branch?

我仍在学习使用 TortoiseGit 的特性和 版本控制 的概念。

我已阅读此 article,但我不清楚是否需要遵循该程序。它描述了补丁

所以,我有这个功能分支,现在已经按照指示合并到主分支中。我想尝试针对其中一项提交(突出显示)对应用程序进行修改。所以我想尝试一个想法,以不同的方式做事,如果我高兴就实施它。

正确的做法是什么?我是独立开发者,我的项目没有与其他人合作。

感谢您的建议。

如果您是唯一的开发者,并且您绝对确定没有任何外部方检查过您的母版,您可以执行以下操作:

  • 通过从当前主分支的顶部分支来创建主分支的备份。

  • 看起来您也有更改提交到您的 master 分支。也从 master 创建一个功能分支。此时 master-backup 分支和你的 new-branch 应该是相同的

  • 将您的 master 重置为合并到您的功能分支之前的状态。在这种情况下,这是 'Removed MWB files....'

  • 检查您要更改的功能分支

  • git rebase -i master

  • 编辑包含要更改的提交的行。将 'pick' 更改为 'e' 并保存文件以启动交互式 rebase

  • 当 rebase 在您要更改的提交处停止时,执行 git reset HEAD~ 这会将您的工作目录置于您提交之前的状态。所有更改都在索引上。

  • 对源代码进行必要的更改并提交

  • git rebase continue

  • 一旦交互式变基完成。 Checkout master 并将你的新功能分支合并到 int.

  • 检查下一个分支 'lingala' 翻译。

  • 在新master的基础上Rebase,然后合并

  • 检查你的 feature/new-branch,并在新的 master 之上变基然后合并

  • 你完成了。将所有内容推送到您的遥控器。请注意,您必须使用 'git push --force'

  • 如果您在其他机器上有代码签出,请确保执行以下操作

    git 获取; git结帐大师; git 重置 --hard origin/master

  • 请注意,最后一步将销毁您在 master 分支上所做的任何本地更改以及任何未提交的文件。如果你想保留它们,要么把它们藏起来,要么创建一个临时的本地分支,你以后可以在新的 master

  • 之上变基

如果您不想按原样保留历史树,只需执行以下步骤:

  • 开始交互式变基 git rebase -i 'xxxxxxx' 其中 xxxxxx 是带有注释 'Removed MWB files....'

  • 的提交的提交 ID
  • 在你的 rebase sheet 中编辑你想要更改的提交行,将 'pick' 替换为 'edit'

  • 当 rebase 停止时。执行 'git reset HEAD~' 这会将您的工作目录置于您提交这些更改之前的状态。

  • 更改您的文件,提交它们。

  • git rebase --continue

  • 使用 --force 选项推送您的主分支

  • 利润

在你这样做之前。确保创建主分支的备份副本

如果出现问题,您可以通过

从备份中恢复主分支

git checkout master git reset --hard backup-master git push --force

总会有一些时候您会意识到提交并不完美或引入了错误。

您有多种选择:

1) 修复问题并在 master(或 bugfix/feature 分支中)提交修复。你应该这样做,特别是如果 "faulty" 提交是很久以前的事了。

2) 选项 1 的缺点可能是您不知道此修复属于最近的功能分支。在这里,您可以再次切换到功能分支(如果您已经删除了该分支,re-create 它在合并前的最新提交上),在那里提交修复并将功能分支再次合并到 master。这样在log中可以看到这个fix也属于feature分支

3) 第三种选择是重写您的历史记录 - 如果您与其他用户一起开发并且 "faulty" 提交已经推送或更早,则尤其不鼓励这样做。要重写历史记录,请转到日志对话框并在错误提交和 select "Rebase ... onto this" 之前的提交上打开上下文菜单。然后 rebase 对话框打开,检查 "Preserve merges" 和 "Force" - 然后应该显示所有以 "faulty" 开头的提交。现在,单击 "faulty" 提交并将其标记为 "Edit",然后开始变基。 - 现在你的工作树被放回原来的状态。在工作树上进行更改,选中 "Edit/Split commit" 并单击变基对话框中的 "Amend"。 - 之后所有其他剩余的提交都是 re-applied 并且修复包含在您的历史记录中。

PS:关于补丁和拉取请求的文章是关于与其他开发人员共享更改。