知七ing 2024-04-19 17:25 采纳率: 0%
浏览 6

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

介绍下情况:两个分支,分支a和b,一期在a分支上提交代码,后面分出新的分支b,后续二期项目在b上提交代码(以区分几期的项目,在b分支提交期间也切回a分支修改提交过a分支)
目前问题:需要将分支b上的最近提交的几个指定提交记录提交到分支a上面,但不提交之前在b上提交的内容。我使用了git cherry-pick,提交推送后,却发现本地的a分支上有了b分支提交记录前的所有提交记录,并且文件都有,处于已提交但未推送状态,远程没问题。但只要一提交,所有一百多个文件就要求推送,这种有办法处理吗?

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 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 <last_b_commit_hash> b
      

      其中 <last_b_commit_hash> 是你在第二步中找到的哈希值,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分支之前的其他提交。记住,这是一个复杂的操作,所以在操作之前一定要备份你的工作区和暂存区,以防万一。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥20 c#使用NPOI向word表格中添加字段导致word有概率警告不可识别
  • ¥15 怎么使用hxe16进制编码器修改视频数据和图片一样!求教程!
  • ¥15 怎么用python模拟光的折射,反射,和全反射
  • ¥15 python打印机打印word和PDF文件出来的是乱码
  • ¥15 求达梦8数据库安装包
  • ¥15 YOLOv8模型网络结构更改后报错
  • ¥15 深度学习中梯度为None
  • ¥15 zynq烧写程序到flash后不运行
  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python