介绍下情况:两个分支,分支a和b,一期在a分支上提交代码,后面分出新的分支b,后续二期项目在b上提交代码(以区分几期的项目,在b分支提交期间也切回a分支修改提交过a分支)
目前问题:需要将分支b上的最近提交的几个指定提交记录提交到分支a上面,但不提交之前在b上提交的内容。我使用了git cherry-pick,提交推送后,却发现本地的a分支上有了b分支提交记录前的所有提交记录,并且文件都有,处于已提交但未推送状态,远程没问题。但只要一提交,所有一百多个文件就要求推送,这种有办法处理吗?
git问题,分支直接的提交切换
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
7条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
要解决这个问题,你需要使用
git rebase
命令结合--onto
选项,这样可以重新安排特定范围内的提交,使其看起来像是在另一个分支上进行的。首先,你需要找到要在A分支上应用的最后一次B分支提交的哈希值。这可以通过查看提交历史来完成,通常它会是最新的提交。这里是一个详细的步骤指南:
-
首先,确保你在A分支上:
git checkout a
-
确定要从B分支复制的最后一个提交的哈希值。这个哈希值是你要在A分支上应用的最后一个提交。你可以通过
git log
命令查看,找到一个你知道它是B分支开始的地方的提交。git log --oneline --graph --all
-
使用
git rebase --onto
命令将选定的提交之后的提交移动到A分支上:git rebase --onto a <last_b_commit_hash> b
其中
<last_b_commit_hash>
是你在第二步中找到的哈希值,b
是原始的B分支名称。 -
在执行
rebase
操作时,可能会遇到合并冲突。如果有冲突,你需要手动解决它们,然后运行:git add . git rebase --continue
重复此过程直到所有冲突都解决。
-
解决完所有冲突并继续
rebase
后,确认结果是否符合预期:git log --oneline --graph --all
-
如果一切正常,你可以删除B分支的暂存快照(只删除本地版本):
git reset --hard HEAD~1
-
最后,再次检查工作区的状态,确认只有你想提交的更改在待提交列表中,然后提交:
git status git commit -m "Cherry-picked specific commits from branch B" git push origin a
按照这些步骤操作,你应该能够在A分支上得到想要的提交,而不会包含B分支之前的其他提交。记住,这是一个复杂的操作,所以在操作之前一定要备份你的工作区和暂存区,以防万一。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下!
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证