Git 合并到历史上的旧点

Git merge to a old point in history

我有一个小型存储库,我尽量保持线性(只有一个主分支)。在某个时间点,我在我的代码中引入了重大更改,在该点放置一个标记并继续。

现在,在大量提交和推拉之后,我需要从旧代码中提取一些东西。我从旧提交中检出了一个新分支,添加了一个带有一些辅助脚本的新文件夹(没有更改现有代码)并提交到这个分支。

我想在主分支中再次合并这个分支,而不是有一个悬空的死分支。问题是我想在重大更改的标签之前合并它(这些新脚本会破坏 HEAD 中的代码)。可能吗?

我也阅读了有关变基的内容,但我很担心,因为我已经推送和拉取了较新的提交。

是的,你可以这样做(使用the merge strategy ours):

git checkout master
git merge -s ours dead_branch

dead_branch 将被视为已合并到 master 中,但 dead_branch 文件的 none 将出现在(或修改任何文件) master.
无需合并 "before" 标签。您合并分支(及其脚本),除了该分支引入的更改不会反映在 master.

ours

This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches.
It is meant to be used to supersede old development history of side branches.

Note that this is different from the -Xours option to the recursive merge strategy.