005、Git远程协作:连接GitHub/Gitee,掌握Push、Pull与团队协作规范

张开发
2026/4/14 14:15:10 15 分钟阅读

分享文章

005、Git远程协作:连接GitHub/Gitee,掌握Push、Pull与团队协作规范
从一次深夜合并冲突说起上周团队里新来的小伙凌晨两点给我打电话说他的git push被拒绝了本地分支和远程分支“好像都有修改”现在代码全乱了。我让他把终端截图发过来——好家伙他直接在main分支上改了三天代码从来没pull过远程仓库早被其他人更新了十几个提交。这种场景太典型了。很多初学者以为 Git 远程协作就是“上传下载”结果一遇到冲突就手足无措。今天咱们就聊聊怎么正确连接远程仓库以及那些教科书里不会写的团队协作潜规则。连接远程仓库别只会用 HTTPS第一次克隆仓库很多人顺手就复制了 HTTPS 链接gitclone https://github.com/username/repo.git这没问题但每次push都要输密码烦不烦如果你经常推送代码建议配置 SSH 密钥# 生成密钥如果还没有ssh-keygen-ted25519-Cyour_emailexample.com# 然后一路回车就行不用设密码方便当然设了更安全# 把公钥复制到剪贴板cat~/.ssh/id_ed25519.pub|pbcopy# Mac# 或者cat~/.ssh/id_25519.pub|clip# Windows# 去 GitHub 或 Gitee 设置里找到 SSH Keys粘贴添加之后克隆就用 SSH 地址gitclone gitgithub.com:username/repo.git从此告别密码输入特别是用 CI/CD 工具时SSH 密钥几乎是必选项。注意公司内网 GitLab 可能要求用 HTTPS 加访问令牌具体看公司规定。但个人项目强烈推荐 SSH省心。Push 之前先 Pull 一下我见过最经典的错误流程gitadd.gitcommit-mfix buggitpush origin main# 直接失败因为远程有更新然后就开始慌乱用git pull --force把同事代码冲掉了。正确姿势永远是这样# 先拉取远程最新代码fetch mergegitpull origin main# 如果有冲突解决冲突再提交gitadd.gitcommit-mmerge remote changes# 最后推送gitpush origin main更专业的做法是使用--rebasegitpull--rebaseorigin main这会让你的提交“挪到”远程最新提交之后保持线性历史看起来更干净。但 rebase 会改写历史团队新手慎用容易把自己搞晕。分支策略别在 main 上直接改那位凌晨求助的小伙犯的最大错误就是在main分支上直接开发。规范的团队协作应该这样# 1. 每次新功能开新分支gitcheckout-bfeature/login-page# 2. 在这个分支上开发、提交gitadd.gitcommit-madd login form# 3. 开发过程中定期同步主分支gitcheckout maingitpull origin maingitcheckout feature/login-pagegitrebase main# 或者 merge main# 4. 推送到远程第一次推送需要设置上游gitpush-uorigin feature/login-page# -u 参数以后就可以直接 git push不用指定远程分支了为什么这么麻烦因为隔离风险。你的实验性代码不会污染主分支即使写崩了删掉分支重来就行。而且代码审查Pull Request/Merge Request必须基于分支。团队协作的潜规则提交信息怎么写别写“修复bug”“更新代码”这种废话。好的提交信息像这样feat(auth): add OAuth2 login support fix(api): handle null pointer in user query docs(readme): update installation steps用feat、fix、docs、style、refactor、test、chore开头后面括号标注模块冒号后写具体改动。这是 Angular 团队的规范很多项目都在用。什么时候该 Pull Request新功能完成时修复重大 bug 时任何可能影响其他模块的修改小修改比如改个错别字可以直接合并但最好也走流程养成习惯。冲突解决谁负责谁产生冲突谁负责解决。如果你pull时发现冲突说明你本地修改和远程修改冲突了你得自己解决。别指望别人帮你调他们不知道你的代码逻辑。解决冲突后一定要测试特别是合并别人的代码后跑一遍关键流程。我见过有人解决冲突时把别人的重要判断语句删了导致线上报错。那些容易踩的坑1. 密码缓存问题如果你用 HTTPSGit 可能会缓存密码突然某一天要求重新输入。这时候可以配置缓存gitconfig--globalcredential.helper cache# 缓存15分钟gitconfig--globalcredential.helpercache --timeout3600# 缓存1小时或者用 manager 工具如 Git Credential Manager for Windows。2. 推送错了分支不小心把feature分支推到了main# 先删除远程错误推送gitpush origin--deletemain# 但注意如果团队其他人已经拉取了别这么干会坑队友所以推送前一定要git branch -a确认当前分支。3. 强制推送的灾难gitpush--forceorigin main这是核武器除非你百分百确定只有你一个人在用这个分支否则别用。更安全的是--force-with-lease它会检查远程分支是否被别人更新过。个人经验建议每天开工第一件事git checkout main git pull保持主分支最新。推送前跑一遍git log --oneline --graph看看提交历史是否整洁。遇到冲突别怕冲突只是 Git 提醒你“这里需要人工判断”不是错误。用 VS Code 或 IDE 的冲突解决工具比手动找标记舒服多了。分支命名用feature/xxx、bugfix/xxx、hotfix/xxx前缀一目了然。保护主分支在 GitHub/Gitee 设置里开启分支保护禁止直接push到main必须通过 Pull Request。这是团队协作的底线。远程协作最核心的不是命令是默契。和团队约定好流程比任何高级技巧都管用。刚开始可能觉得繁琐等经历过一次“代码丢失事故”或“线上回滚灾难”后你就会明白这些规范为什么存在。Git 不是魔法它只是把你和队友的修改编织成历史的工具。织得好项目脉络清晰织得乱就是一团毛线球。慢慢来你也能成为那个“解球”的人。

更多文章