尝试对合并的功能分支的现有提交进行修改的正确方法是什么?
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:关于补丁和拉取请求的文章是关于与其他开发人员共享更改。
我仍在学习使用 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:关于补丁和拉取请求的文章是关于与其他开发人员共享更改。