Git分支开发最佳实践咨询及误操作后续问题求助
分支开发操作错误分析与修复方案
嘿,我来帮你理清楚这次操作里出的问题,以及怎么修复,还有以后正确的分支开发流程该怎么走~
先说说你操作里的核心问题
你在branch9分支做完提交后,执行了git push origin master——这个命令的本质是把当前本地分支(也就是branch9)的内容直接推送到远程的master分支,相当于跳过了PR的代码审查和合并流程,直接覆盖/改写了远程master的历史。这就导致之后你在GitHub开PR时,远程master已经和branch9的内容一致(甚至因为强制推送导致历史混乱),自然会出现异常。
怎么修复当前的异常情况
修复方式分两种情况,取决于是否有其他团队成员已经拉取了被错误修改的远程master:
- 如果只有你一个人用这个仓库,或者没人拉取过错误的
master:- 切换回本地
master分支:git switch master - 回滚到错误推送前的版本(假设错误提交是最后一次):
git reset --hard HEAD~1 - 强制推回远程,覆盖错误的
master:git push origin master --force
- 切换回本地
- 如果已经有其他人拉取了错误的
master:
强制回滚会导致其他人的仓库出现冲突,这时候应该用撤销提交的方式:- 切换到本地
master分支:git switch master - 找到错误提交的哈希值(可以用
git log查看) - 生成一个新的提交来撤销错误更改:
git revert <错误提交的哈希值> - 推送到远程:
git push origin master
- 切换到本地
正确的分支开发最佳实践
以后按这个流程走就不会出错啦:
- 创建并切换到功能分支:
git switch -c branch9(或者旧版本的git checkout -b branch9) - 在分支上开发,完成后提交更改:
git add . git commit -m "清晰描述你的更改,比如:添加XX功能相关文件" - 把本地功能分支推送到远程:
git push --set-upstream origin branch9(第一次推送时设置上游分支,之后直接git push就行) - 去GitHub上,基于远程的
branch9分支创建Pull Request到master - 等待代码审查(如果需要),确认没问题后在GitHub上点击合并按钮完成合并
- 合并后,切换回本地
master,拉取最新的远程代码:git switch master git pull origin master - 可以删除本地的功能分支:
git branch -d branch9,远程的也可以删掉:git push origin --delete branch9
额外提醒
以后推送分支时,一定要注意当前所在的分支,尽量用git push(设置上游后)或者明确指定要推送的分支名(比如git push origin branch9),不要随意推送到master分支,除非你确实是在本地master分支做了合规的更改,并且和远程master保持同步。
内容的提问来源于stack exchange,提问作者Rajeev Ghosh
相关产品推荐
相关产品推荐

