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

时间:2017-01-24 15:24:36

标签: tortoisegit

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

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

所以,我有这个功能分支,现在已经合并到主服务器中。我希望能够对其中一个提交(突出显示)进行应用程序的修订。因此,如果我感到高兴,我想尝试以不同方式做事并实施它。

Log

这样做的正确方法是什么?我是唯一的开发人员,并不与我的项目合作。

感谢您的建议。

3 个答案:

答案 0 :(得分:3)

总会有时候你意识到提交不完美或引入错误。

您有几种选择:

1)修复问题并在master(或错误修复/功能分支)中提交修复。你应该这样做,特别是,如果“错误”提交是在很久以前。

2)选项1的缺点可能是您不知道此修复程序是否属于最近的功能分支。在这里,您可以再次切换到功能分支(如果您已经删除了分支,在合并之前的最新提交上重新创建它),在那里提交修复并再次将功能分支合并到master。这样,您可以在日志中看到此修复程序也属于功能分支。

3)第三种选择是重写您的历史记录 - 如果您与其他用户一起开发并且“错误”提交已被推送或更旧,则尤其不鼓励。要重写历史记录,请转到日志对话框并在错误提交之前打开提交上下文菜单,然后选择“Rebase ... to this”。然后打开rebase对话框,在那里选中“Preserve merges”和“Force” - 然后应显示所有以“faulty”开头的提交。现在,单击“错误”提交并将其标记为“编辑”,然后启动rebase。 - 现在你的工作树又回到了原来的状态。在工作树上进行更改,选中“编辑/拆分提交”,然后单击“rebase”对话框中的“Amend”。 - 之后重新应用所有其他剩余提交,并且修复程序包含在您的历史记录中。

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

答案 1 :(得分:2)

如果您是唯一的开发人员并且您完全确定没有外部人员签出您的主人,您可以执行以下操作:

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

  • 您似乎也对主分支进行了更改。也可以从主服务器创建功能分支。此时,主备份分支和新分支应该相同

  • 将您的主人重置为合并到功能分支之前的状态。在这种情况下,这是'删除的MWB文件....'

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

  • 执行git rebase -i master

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

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

  • 对您的来源进行必要的更改并提交

  • 执行git rebase continue

  • 交互式rebase完成后。 Checkout master并将您的新功能分支合并到int。

  • 查看您的下一个分支'lingala'翻译。

  • 将其重新基于新主服务器,然后合并

  • 检查您的功能/新分支,然后在新主服务器上重新设置然后合并

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

  • 如果您在其他计算机上有代码检出,请务必执行以下操作

    git fetch; git checkout master; git reset --hard origin / master

  • 请注意,最后一步将销毁您在主分支上的任何本地更改以及任何未提交的文件。如果你想要保存它们,要么存储它们,要么创建一个临时的本地分支,以后可以在新的主机上重新设置

答案 2 :(得分:2)

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

  • 启动交互式rebase git rebase -i 'xxxxxxx',其中xxxxxx是提交的提交ID,其中包含评论'已移除的MWB文件....'

  • 在您的rebase工作表中,通过替换' pick'编辑您要更改的提交行。使用'编辑'

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

  • 对文件进行更改,然后提交。

  • 执行git rebase --continue

  • 使用--force选项

  • 推送您的主分支
  • PROFIT

在你做这件事之前。请务必创建您的主分支的备份副本

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

从备份中恢复主分支

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