• git问题,分支直接的提交切换


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 知七ing 2024-04-19 17:25 采纳率: 0% 浏览 4 首页/ 开发工具 / git问题,分支直接的提交切换 git 介绍下情况:两个分支,分支a和b,一期在a分支上提交代码,后面分出新的分支b,后续二期项目在b上提交代码(以区分几期的项目,在b分支提交期间也切回a分支修改提交过a分支)目前问题:需要将分支b上的最近提交的几个指定提交记录提交到分支a上面,但不提交之前在b上提交的内容。我使用了git cherry-pick,提交推送后,却发现本地的a分支上有了b分支提交记录前的所有提交记录,并且文件都有,处于已提交但未推送状态,远程没问题。但只要一提交,所有一百多个文件就要求推送,这种有办法处理吗? 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-19 17:25
      关注

      引自免费微信小程序:皆我百晓生

      要解决这个问题,你需要使用git rebase命令结合--onto选项,这样可以重新安排特定范围内的提交,使其看起来像是在另一个分支上进行的。首先,你需要找到要在A分支上应用的最后一次B分支提交的哈希值。这可以通过查看提交历史来完成,通常它会是最新的提交。

      这里是一个详细的步骤指南:

      1. 首先,确保你在A分支上:

        git checkout a
        
      2. 确定要从B分支复制的最后一个提交的哈希值。这个哈希值是你要在A分支上应用的最后一个提交。你可以通过git log命令查看,找到一个你知道它是B分支开始的地方的提交。

        git log --oneline --graph --all
        
      3. 使用git rebase --onto命令将选定的提交之后的提交移动到A分支上:

        git rebase --onto a  b
        

        其中 是你在第二步中找到的哈希值,b 是原始的B分支名称。

      4. 在执行rebase操作时,可能会遇到合并冲突。如果有冲突,你需要手动解决它们,然后运行:

        git add .
        git rebase --continue
        

        重复此过程直到所有冲突都解决。

      5. 解决完所有冲突并继续rebase后,确认结果是否符合预期:

        git log --oneline --graph --all
        
      6. 如果一切正常,你可以删除B分支的暂存快照(只删除本地版本):

        git reset --hard HEAD~1
        
      7. 最后,再次检查工作区的状态,确认只有你想提交的更改在待提交列表中,然后提交:

        git status
        git commit -m "Cherry-picked specific commits from branch B"
        git push origin a
        

      按照这些步骤操作,你应该能够在A分支上得到想要的提交,而不会包含B分支之前的其他提交。记住,这是一个复杂的操作,所以在操作之前一定要备份你的工作区和暂存区,以防万一。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-19 17:25
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      你可以按照以下步骤处理这个问题:

      1. 确认当前所在的分支,使用git branch命令来查看当前分支。

      2. 切换到分支a,执行git checkout a命令。

      3. 使用git log命令查看分支b上的最近几个提交记录的哈希值。

      4. 执行git cherry-pick 命令,将这几个提交应用到分支a上。注意,需要逐个提交记录执行该命令。

      5. 查看分支a是否包含了期望的提交记录,可以使用git log命令来确认。

      6. 如果分支a上被包含的提交记录过多,可以使用git reset命令来回退到指定的提交记录,例如git reset

      7. 最后,将分支a上的修改推送到远程仓库,使用git push origin a命令。

      请注意,cherry-pick命令会将指定的提交记录应用到当前分支,并生成新的提交。如果之前在分支b上做的提交非常多,可能会导致冲突较多,需要手动解决冲突。建议在执行cherry-pick前,先在本地备份相关分支的代码。

      如果以上步骤仍无法解决问题,你可以尝试以下方法:

      1. 创建一个新的临时分支,用于处理这些提交记录,例如git checkout -b temp_branch

      2. 使用git cherry-pick 命令将需要的提交记录应用到临时分支上。

      3. 查看临时分支是否包含了期望的提交记录,可以使用git log命令来确认。

      4. 如果临时分支上显示的提交记录正确,使用git checkout a切换回分支a。

      5. 使用git cherry-pick 命令将临时分支上的提交记录应用到分支a上。

      6. 最后,将分支a上的修改推送到远程仓库,使用git push origin a命令。

      这种方法将会创建一个新的临时分支,只包含期望的提交记录,从而避免将其他不需要的提交记录引入到分支a中。请注意,执行cherry-pick命令时可能会遇到冲突,需要手动解决冲突。

      评论
    • GISer Liu 2024-04-19 18:15
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你描述的情况,你想要将分支 b 上最近的几个提交记录提交到分支 a 上,但不想提交之前在 b
      上提交的内容,正确的方法是使用 git cherry-pick,但你遇到了一些问题。
      问题的关键在于,git cherry-pick 会将指定的提交记录复制到当前分支,并且会包含这些提交记录所修改的内容。因此,当你在分支
      b 上进行了一些提交后,再使用 git cherry-pick 将某些提交复制到分支 a
      上时,实际上也会复制这些提交所修改的内容,导致 a 分支上出现了之前 b 分支上的提交记录所修改的文件。
      解决这个问题的思路是,在进行 git cherry-pick 操作之前,先创建一个临时分支,将分支 b
      上需要提交的最近几个提交记录合并到这个临时分支上,然后再从这个临时分支 cherry-pick 到分支 a 上。这样就可以避免将之前在
      b 分支上提交的内容一并带到 a 分支上。
      下面是具体的步骤:

      1. 创建一个临时分支,命名为 temp
        cssCopy code
        git checkout -b temp
        
      2. 使用 git cherry-pick 将分支 b 上需要提交的最近几个提交记录合并到 temp 分支上,假设这里有三个提交记录需要合并,分别为 commit1commit2commit3
        Copy code
        git cherry-pick commit1
        git cherry-pick commit2
        git cherry-pick commit3
        
      3. 确保 temp 分支上只包含了你想要提交到 a 分支上的提交记录。
      4. 切换到分支 a
        cssCopy code
        git checkout a
        
      5. temp 分支上的提交记录 cherry-pick 到分支 a 上:
        Copy code
        git cherry-pick temp
        
      6. 解决可能出现的冲突,完成提交。
        通过以上步骤,你就可以将分支 b 上最近的几个指定提交记录提交到分支 a 上,而不包含之前在 b
        分支上提交的内容。
        关于提交后所有文件都要求推送的问题,这可能是因为你在提交后未进行推送,导致本地仓库和远程仓库的差异。你可以使用 git push
        命令将本地的变更推送到远程仓库,或者使用 git push -u origin a 将分支 a
        推送到远程仓库,并建立本地分支 a 与远程分支 a 的关联。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-19 20:05
      关注

      【相关推荐】



      • 这篇博客: idea中,git的cherry-pick怎么用?中的 4.全小冉在分支B上,看到了全大冉提交的功能,他也想努力成功架构师,所以,他想让自己的分支B也有这3个提交历史。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

        在这里插入图片描述


      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    • 空白诗 2024-04-23 15:06
      关注

      当你只想将分支 b 上的几个最新提交应用到分支 a 上,并且不希望包含 b 分支之前的所有提交时,使用 git cherry-pick 命令是正确的做法。根据您的描述,您可能已经成功地 cherry-pick 了 b 分支上的几个指定提交到了 a 分支,但是现在遇到了意外的情况——a 分支上出现了 b 分支其他历史提交的更改,并且这些更改处于已提交但未推送的状态。

      有几个可能的原因和解决方案:

      1. 检查 cherry-pick 的范围

        • 确保仅 cherry-pick 了所需的那些提交哈希。如果您误 cherry-pick 了包含早期提交引用的后续提交,那么可能会间接引入了那些旧的更改。请检查您使用的 cherry-pick 命令是否只包含了预期的提交。
      2. 查看 a 分支的提交历史

        • 使用 git log --oneline 查看 a 分支的提交历史,确定是否有不属于这次 cherry-pick 操作的提交混入其中。如果发现有误操作,可以通过 git rebase -i 进行交互式重置,移除不需要的提交。
      3. 清理暂存区和工作目录

        • 如果您的工作目录中包含了不应该存在的更改,请确保暂存区干净,没有未提交的更改。可以运行 git status 来检查,然后根据需要使用 git checkout .git reset --hard HEAD 来还原工作目录至最后一次提交的状态。
      4. 恢复 a 分支

        • 如果 a 分支的状态确实因为某些原因变得混乱,您可以基于 a 分支的一个已知良好提交创建一个新的临时分支,然后重新进行 cherry-pick 操作。
      5. 处理待推送的提交

        • 如果确实有多余的提交出现在本地 a 分支,但远程分支没有这些问题,您可以考虑以下方法之一来解决问题:
          • 使用 git rebase --interactive 修剪掉不需要推送的提交。
          • 创建一个新的干净分支, cherry-pick 需要的提交到新分支,然后切换到新分支并推送到远程 a 分支。

      总之,首要任务是理解为什么 a 分支上会出现 b 分支的早期提交。检查 cherry-pick 操作的具体步骤以及 a 分支当前的提交历史,以便针对性地进行调整或修复。如果还有冲突或其他复杂情况,请务必妥善解决冲突并在确认提交历史正确无误后再进行推送。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【MySQL精通之路】MySQL的使用(9)-设置环境变量
    结构体,联合体与位段
    Typescript中的高级类型工具
    网络安全之反弹Shell
    129页6万字大数据集成服务建设项目可行性分析报告
    【分类讨论】CF1834D
    Nginx配置参数详解一篇到底
    雷达模拟触摸屏,支持tuio\鼠标\Touch
    解析Vue3源码(一)——reactive
    【笔记】从零开始大模型开发与微调:基于PyTorch与ChatGLM
  • 原文地址:https://ask.csdn.net/questions/8091403