移动提交到一个新的分支(重命名分支,而不是强制推送?)

还有一个问题几乎完全描述了我的情况(Git - 将推动提交给另一个分支)。 唯一的区别是,我想移动的提交位于Develop分支而不是Master(这不应该因为主分支没有特殊之处)。 此外,我们有redmine链接到我们的git存储库。 无论如何,用户亚当对接受的答案发表了评论:

永远不要使用推力,这是一个坏主意。 它会严重破坏已经拉过的任何其他用户的历史记录。 更糟糕的是,如果你将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:“Git:在Git仓库中删除的版本和分支在redmine中显示”。

Redmine特性1273中提出了过去8年来增强功能的要求......

更合理的方法是让Redmine允许通过REST API更改提交消息。
然后,可以在版本控制中设置提交后挂接,以便只修改单个已更改的提交消息,而不是删除并重新导入整个历史记录。

可悲的是,其余的API还不够完善,无法实现这种与SCM相关的操作。

我会简单地创建一个新的分支,樱桃选择正确的提交,并推动所说的新分支。


我的建议是cherry-pick你的提交到一个新的分支,而不是重命名现有的分支。

然后,您将能够将该分支push送到远程,而不用强行推送它。

git branch -b BRANCHNAME #Create new branch
git cherry-pick HASHVALUE #Cherry pick all the commits one by one. (eg: HASHVALUE - 5e2ld9)
链接地址: http://www.djcxy.com/p/25259.html

上一篇: move pushed commits to a new branch (rename branch instead of force pushing?)

下一篇: How to cherry pick a range of commits and merge into another branch