将前两个条目从 master 分支移动到现有的合并功能分支

Moving top two entries from master branch into an existing merged feature branch

我知道我之前讨论过这个,但我总是很难把它弄好!

这是我的日志:

这就是我想要做的:

  1. 将前 2 个条目移至 workbook-monthly-data-validation 分支。
  2. 从顶部条目开始编辑那一秒的消息。 应该是错误
  3. HEAD 的唯一条目应该是完成标准化...

所以我想结束:

Completed ...
\
 \
  Introduced...
  Bug fix...
  Added new help button..
     down to 
  Added new window
 /
/
Standardised the placement...

再次使用 TortoiseGit 实现此目的的最简单方法是什么?

谢谢。

更新

不知怎么的,我设法把它填满了一点。在对某个点的第一个答案之后,一切都很好。最后,我删除了本地和远程的功能分支,并强制推送了 master。事情似乎是正确的,但我丢失了一些代码更改。所以无论如何我不得不再次添加一个新条目以使其正确:

所以我想我现在必须离开它了。从技术上讲,我不得不重做的那些更改是提交的一部分,所以我很困惑。

我确实有原始源文件夹的副本,功能分支仍然存在,所以我们可以再试一次,但我不确定哪里出错了。

我知道出了什么问题。我想在开头结束的那条消息是在对 RC 文件进行其他更改之前。所以它抹杀了之前所做的更改。我不明白为什么它没有引发任何冲突。

我不能保证这是最好的解决方案,但它确实有效(这是最低要求,对吧?)。时间和其他答案会告诉你是否有 better/faster 方法。

  • Switch/Checkout 'workbook' 分支
  • Ctrl-click-select 最后 2 个提交('master' 上的那些你想移动到 'workbook'),右键单击,Cherry 选择这些提交

您将获得 Rebase UI。

  • 将要更改消息的一个提交更改为 "Edit",将另一个更改为 "Pick"(默认)
  • 执行这个。

在您的示例中,您有一个先前的提交将保留在 'master' ("Completed the standardisation...") 这可能会导致在此操作期间发生冲突,具体取决于每次提交所影响的文件。如果是这样,请确保您不包括您不移动到 'workbook'.

的提交的更改

无论哪种方式,Tortoise 也会暂停让您编辑您设置为编辑的提交的消息。只需更改文本字段中的消息,然后单击“提交”继续。

到那时,所需的提交将同时存在于 'master' 和 'workout' 中。现在从 'master'

中删除那些
  • Switch/Checkout 'master'
  • 右键单击 "Completed..." 提交(合并后第一次),将 'master' 重置为此,选择硬重置

有几种方法可以做到。

一种方法是切换到 workbook-monthly-data-validation 分支并将其重置(硬)到您希望在此分支上拥有的最新提交(首先切换到它,然后使用上下文菜单硬重置)。

然后 select "Rebase onto" 在要将其他两个提交的上下文菜单上。

在变基对话框中 select 编辑要更改提交文本的提交并 select 跳过合并提交。

现在你已经在 workbook-monthly-data-validation 分支上完成了所有你想要的提交。

之后你必须修改 master:切换到它并将它硬重置为功能分支之前的最后一次提交。然后再次合并功能分支。


如果您在发现错误时切换回刚刚合并的分支并在那里提交更改,则可以避免如此广泛的变基会话。然后你可以决定是重置你的主分支(到你的功能分支之前的提交并再次合并)还是你只是再次将功能分支合并到主分支。这看起来像下面的场景:

| Bugfix (merge)
| \
|  | Introduced...
|  | Bug fix...
| Completed ... (merge)
| \|
|  | Added new help button..
|  |    down to 
|  | Added new window
| /
| Standardised the placement...

这样你仍然可以看到哪些提交属于你的功能分支,但你不必做那么多rebases/resets和强制推送。