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 - 将推送的提交移动到新分支(重命名分支而不是强制推送?) 的相关文章

  • 将新文件推送到新存储库 Git

    我是 git 新手 还没有完全了解工作流程 因此 我在 github com 上创建了一个存储库 并且能够从我的计算机推送所有文件 现在我已经在 github 上创建了一个新的存储库 并在我的计算机上创建了一个新文件夹 所有内容都从新文件夹
  • 签入时 git-tf 告诉我“无法锁定”;我该如何修复它?

    我正在使用 git tf 推送到 TFS 项目 有时 当我尝试检查 TFS 中的一个或多个提交时 我会收到如下消息 正在连接到 TFS 签入 MyProject 0 git tf 无法锁定 MyProject 这是什么意思 是什么让我无法锁
  • 错误:获取远程存储库“origin”时出错,返回状态代码-1:

    我在 Windows 上运行 Jenkins 当我尝试通过 jenkins 构建我的项目时 出现以下错误 git exe c core askpass true fetch tags progress
  • git push origin master 失败

    我正在尝试将现有文件夹上传到 gitHub 按照说明 我在 Windows 中输入了以下内容 git remote add origin email protected cdn cgi l email protection myname m
  • GIT Rebase 对多个 0.5GB 二进制文件致命

    这个问题本质上是重新开rebase 期间 git 崩溃 https stackoverflow com q 7692944 1286639从来没有答案 我正在尝试从我的 secc 分支进行变基 git rebase main First r
  • 在 GitHub 上更新拉取请求后如何恢复审核流程?

    我分叉了 GitHub 存储库并创建了拉取请求 审稿人要求我修改 要求更改1 条评论请求由具有写入权限的审阅者进行更改 了解更多 https docs github com en github collaborating with issu
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 获取引用而不下载对象[重复]

    这个问题在这里已经有答案了 我想检查 origin master 是否与我的 HEAD 不同 I do not想要git fetch 因为它可能非常昂贵 我滥用 git 的方式使得成本高得令人望而却步 任何允许我从远程获取提交列表或顶部提交
  • 如何使用 git-svn 使 svn:external 保持最新?

    将我的存储库视为 SVN 存储库 我得到 svn co http myrepo foo trunk foo foo bar baz gt http myrepo baz trunk 将其视为 Git 存储库 我得到 git svn clon
  • 让“git pull”在拉取不同分支时要求确认

    当同时处理许多项目和分支时 我偶尔会犯一些愚蠢的错误 比如拉入错误的分支 例如在分支上master I did git pull origin dangerous code并且有一段时间没有注意到这一点 这个小错误造成了很大的混乱 当我尝试
  • Git 二进制文件与 .gitattributes 中的 -diff

    在 gitattributes 中有以下等价内容 chm binary chm diff 我努力了 chm二进制文件 但恐怕它仍然可能尝试合并这些文件 是 diff更适合我打算做什么 另外 在提交给定类型的文件后 此设置是否适用 Thank
  • 有什么方法可以有效地应用大型 git 补丁吗?

    我们收到了一个大补丁 修改了大约 17000 个文件 其大小为5 2G 应用补丁时git apply 3 12个小时后还没有完成 我们将每个文件的补丁分成更小的补丁 然后一一应用它们 这样至少我们可以看到进度 再次卡在一个文件补丁上 仍然有
  • git am:补丁格式检测失败

    我以前从未在 Git 中使用过补丁 我需要一些帮助 我正在尝试将补丁应用到 Git 存储库来测试 Wine 补丁 特别是这个补丁在这里 https bugs winehq org attachment cgi id 60752 所以我做了以
  • GitHub Web UI 中的“base”和“head”存储库是什么?

    GitHub 的 UI 相当不直观且考虑不周 所以这里有一个问题 什么是 头 回购 什么是 基础 回购 不知道是从哪一个抄来的 基础 和 头部 这两个词的意思是相同的 链表的 头 类似于树的 基 GitHub 有叉树和文件树 Head 和
  • 从历史记录中删除不需要的文件,包括带有过滤分支的所有引用

    我最近克隆了一个 SVN 存储库 其中曾经有一些二进制文件 但不再需要了 不幸的是 我已经将它和包含的二进制文件推送到了 Github 我现在想使用 git filter branch 删除它们 但在标签和分支方面我遇到了一些问题 基本上
  • 使用子模块克隆存储库:覆盖凭据

    我必须automate克隆存储库并获取它的所有子模块 存储库子模块的 url 指定于 gitmodules 如果我要使用默认值 我就会这样做 git clone recursive https username email protecte
  • git-daemon 的日志保存在哪里? (Windows 上的 Git 使用 Cygwin)

    我正在将 git daemon 作为 Windows 服务运行 使用创建进程 服务中使用的命令是 git daemon reuseaddr base path data test work export all verbose enable
  • 如何归档旧的 git 标签?

    我的 git 存储库中有一些不再重要的旧标签 我想存档标签 以便在运行 git tag 时默认情况下它们不会显示 我不想删除它们 因为我想保留历史记录 我怎样才能做到这一点 可以将标签保留在存储库中并避免将它们列为标签 它还可以避免默认克隆
  • 在 PowerShell 错误消息中使用 touch 命令创建新文件

    我的桌面上有一个使用 PowerShell 创建的目录 现在我尝试在其中创建一个文本文件 我确实将目录更改为新目录 然后输入touch textfile txt 这是我收到的错误消息 touch The term touch is not
  • 使用 Dropbox 作为跨多台机器的 git 工作目录 - 提交不能完美同步

    首先 我想强调这个问题与在 Dropbox 上托管我的中央存储库无关 而且我对使用 git 还很陌生 我能找到的其他涉及 Dropbox 和 git 的问题都没有真正回答我的问题 它们要么是关于使用 Dropbox 托管您的存储库 要么是关

随机推荐