Git - 将推送的提交移动到新分支(重命名分支而不是强制推送?)

2024-04-23

还有一个问题几乎完全描述了我的情况(Git - 将推送的提交移动到不同的分支 https://stackoverflow.com/questions/9086886/git-moving-pushed-commits-to-a-different-branch)。唯一的区别是我想要移动的提交位于 Develop 分支而不是 master 分支(这应该不重要,因为 master 分支没有什么特别的)。此外,我们还将 redmine 链接到了我们的 git 存储库。无论如何,用户 Adam 对已接受的答案发表了评论:

永远不要使用推-力,这是一个坏主意。它会严重破坏任何其他已经拉取的用户的历史记录。更糟糕的是,如果您将 Git 日志集成到其他系统(例如 Redmine、Jira 等)中,那么它可能会严重损坏数据库并且很难清理。

我想回复评论以要求澄清,但我刚刚为此问题创建了一个帐户,并且没有足够的声誉点来发表评论。在我的情况下,只有一名其他开发人员在处理该项目,因此我并不担心会破坏其他人的历史记录。我关心的是对于“更糟糕”的情况应该怎么办?我希望在我的情况下可能没问题,因为在第一次提交需要移动(上面引用的帖子中的提交 C)之后没有输入任何 redmine 问题。但我不确定,因为我不知道如果重写存储库的历史记录,redmine 中可能会搞砸什么。

我在寻找答案时正在考虑这个问题,我想我可能有一个替代解决方案(不过,我对我的 git 知识没有足够的信心将其发布为答案)。如果我将 Develop 重命名为 NewBranch,然后在提交 C 上创建一个新的 Develop 分支会怎样?

# rename branch
git branch -m Develop NewBranch     # Rename locally
git push origin :Develop NewBranch  # Delete remote Develop branch & push NewBranch
git push origin -u NewBranch        # Reset upstream branch

#create new Develop branch
git checkout -b Develop $SHA1_OF_C
git push -u origin Develop

看来这会起作用。有什么陷阱吗?历史会是什么样子?这将如何影响 redmine(除了可能必须将默认分支更改为新的 Develop)?我认为它看起来与我想要的相同,除了它会显示 Develop 从 NewBranch 分支出来,而不是相反。


这里的所有问题是 Redmine 与服务器端 Git 的集成(否则,强制推送完全没问题,前提是其他用户收到通知并且可以将自己的本地分支重置到新的远程分支)

作为这个问题的例证,你有Redmine问题9897 http://www.redmine.org/issues/9897:“ Git:Git 存储库中删除的修订和分支显示在 redmine 中”。

过去 8 年中讨论了增强功能的请求Redmine功能1273 http://www.redmine.org/issues/1273...

一个更明智的方法是让Redmine允许通过更改提交消息REST API http://www.redmine.org/projects/redmine/wiki/Rest_api.
然后,可以在版本控制中设置提交后挂钩,以便仅修改单个更改的提交消息,而不是删除并重新导入整个历史记录。

遗憾的是,其余的 API 还不够完整,无法允许这种与 SCM 相关的操作。

我只需创建一个新分支,在其上挑选正确的提交并推送所述新分支。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git - 将推送的提交移动到新分支(重命名分支而不是强制推送?) 的相关文章

随机推荐