如何将本地修改推送到Bit bucket功能分支避免误推master
Git 分支推送操作指引
先确认当前状态,避免误操作
首先执行两条命令查看当前分支情况:
- 执行
git branch:输出中带*标记的就是你当前正在编辑代码的本地分支 - 执行
git branch -a:可以同时看到所有本地分支、所有远程关联的分支,如果列表里存在remotes/origin/doctor-edits,说明本地已经同步到了远程doctor-edits分支的信息
注意:Bitbucket网页新建远程分支后,普通克隆操作默认只会拉取默认的master分支到本地,不会自动切换到你新建的doctor-edits分支,这也是容易推错分支的核心原因。
分场景处理
场景1:你当前还在master分支上,已经完成代码修改
如果修改还未执行git commit保存
- 执行
git checkout -b doctor-edits,这条命令会基于当前的修改状态,新建并自动切换到本地doctor-edits分支,所有未提交的改动会自动保留 - 执行
git add和git commit保存修改即可
如果修改已经提交到本地master分支
- 先执行
git log,找到你刚才提交的commit对应的短哈希值(比如a1b2c3d) - 执行
git checkout -b doctor-edits新建并切换到本地doctor-edits分支 - 执行
git cherry-pick <刚才复制的commit哈希值>,把你刚才在master上的提交单独迁移到doctor-edits分支 - 切回master分支执行
git reset --hard origin/master,把本地master回滚到和远程master完全一致的干净状态,避免后续误推
场景2:你已经在本地doctor-edits分支上完成修改
直接执行带明确分支名的推送命令即可,不会碰到master分支:
- 第一次推送执行:
git push origin doctor-edits:doctor-edits,含义是将本地的doctor-edits分支内容,推送到远程同名的doctor-edits分支 - 如果后续不想每次都写全分支名,执行一次
git push -u origin doctor-edits设置上游关联即可,之后在这个分支下直接执行git push就会自动推到远程的doctor-edits分支
为什么不能直接执行git push origin不带参数?
- 你通过
git remote -v看到的origin只是远程仓库的地址别名,和要推送的目标分支没有绑定关系 - 不带分支名的
git push行为取决于Git的默认配置:如果当前在master分支上,会直接把本地修改推到远程master;如果当前在其他分支但没设置上游关联,旧版Git可能会出现匹配错误的情况,存在推错分支的风险,第一次推送时显式指定分支名是最稳妥的做法
内容的提问来源于stack exchange,提问作者doctorprofessor
相关产品推荐
相关产品推荐

