binglu’s blog
← 返回文章
开发实践

Git 协作开发完整操作手册

冰露5 分钟

Git 协作开发完整操作手册

Git 团队协作速成指南:10分钟从菜鸟到高手

团队开发中,Git 是每位程序员必备的技能。但对于新手来说,各种分支、拉取、推送的操作常常让人望而生畏。别担心,这份实操指南将带你清晰理解整个协作流程,让你轻松应对团队开发中的各种场景。

团队协作流程图解

文章配图

一、Git 协作开发基本概念

在开始实操前,让我们先理清几个关键概念:

  • 原始仓库(Upstream): 项目的官方仓库,你需要贡献代码的目标仓库
  • Fork仓库(Origin): 你在GitHub上复制的原始仓库副本
  • 本地仓库(Local): 克隆到你电脑上的代码库
  • 分支(Branch): 独立的开发线,让你可以隔离开发不同功能
  • PR(Pull Request): 请求将你的代码合并到原始仓库的申请

通俗解释:

  1. fork:

    • 想象你在网上看到一个很酷的项目,你想参与其中,但不想直接在原项目上乱改。于是你点击“fork”按钮,复制了一份项目到你自己的账号下,这样你就可以自由地修改了。
  2. clone:

    • 现在你有了项目的副本,但只存在于网上。“clone”就是把这份网上的项目复制一份到你的电脑上,这样你就可以在本地进行编辑了。
  3. branch:

    • 项目里有很多代码,你可能只想改其中一小部分。“branch”就是创建一个分支,让你可以在这个分支上工作,而不会影响到其他的代码。
  4. develop:

    • 现在你有了自己的分支,你可以开始在这个分支上“develop”,也就是编写和测试你的代码了。
  5. add:

    • 你写好了一些代码,准备保存。“add”就是把你的新代码或者修改过的代码标记起来,告诉Git:“这些是我接下来想要保存的更改”。
  6. commit:

    • 你已经用“add”标记了你想要保存的更改,现在用“commit”来实际保存这些更改。这就像是给项目打上一个快照,记录下你在这个时间点的代码状态。
  7. pull:

    • 在你编写代码的同时,可能其他人也在项目的主分支上做了一些更改。“pull”就是把那些最新的更改下载到你的电脑上,这样你的代码就能保持最新。
  8. push:

    • 你已经完成了你的更改,并且保存了(commit)。现在用“push”把这些更改上传到你在网上的fork项目中,这样其他人就能看到你做了什么。
  9. PR (Pull Request):

    • 你想要把你的更改合并到项目的主分支中。“PR”就是你向项目维护者发出的一个请求,说:“嘿,看看我的更改,能不能把它们合并到主项目里?”

二、从零开始的Git协作流程

1. 获取项目代码

bash

# 1. 在GitHub上fork项目到自己的账号
# (在原始仓库页面点击右上角的"Fork"按钮)

# 2. 将fork的仓库克隆到本地
git clone https://github.com/你的GitHub用户名/项目名称.git

# 3. 进入项目目录
cd 项目名称

# 4. 查看当前分支
git branch

实用提示: 克隆完成后,你的本地仓库默认只关联了你的fork仓库(origin),而不是原始仓库。这就是为什么我们需要下一步。

2. 建立与原始仓库的连接

bash

# 添加原始仓库作为远程仓库,命名为"upstream"
git remote add upstream https://github.com/原始作者/项目名称.git

# 验证远程仓库设置
git remote -v

执行后,你应该能看到两个远程仓库:

  • origin: 指向你的fork仓库
  • upstream: 指向原始仓库

3. 开发新功能

bash

# 1. 先同步原始仓库的最新代码
git checkout main
git pull upstream main

# 2. 创建并切换到新的功能分支
git checkout -b feature/amazing-feature

# 3. 开发你的功能...

# 4. 提交你的更改
git add .
git commit -m "添加了一个很棒的功能"

实用提示: 分支命名建议使用有意义的前缀,如feature/bugfix/hotfix/或你的名字如alex/

4. 处理可能的代码冲突

bash

# 在推送前,先同步原始仓库的最新变化
git checkout main
git pull upstream main

# 切回你的功能分支
git checkout feature/amazing-feature

# 合并主分支的更改(可能会有冲突)
git merge main

# 如果有冲突,解决冲突后
git add .
git commit -m "解决合并冲突"

5. 推送并创建Pull Request

bash

# 推送到你的fork仓库
git push origin feature/amazing-feature

然后到GitHub网页上,在你的fork仓库中点击“Compare & pull request”按钮,填写PR描述后提交。

三、高级Git技巧:merge vs. rebase

在处理团队协作时,你可以使用两种方式整合代码:merge和rebase。

merge(合并)

bash

git checkout feature/amazing-feature
git merge main

特点:

  • 保留完整历史记录
  • 一次性处理所有冲突
  • 适合公共分支

rebase(变基)

bash

git checkout feature/amazing-feature
git rebase main

特点:

  • 创建更干净的提交历史
  • 逐个提交处理冲突
  • 适合整理个人分支

黄金法则: 永远不要对已推送到公共仓库的提交使用rebase,这会改变历史记录,给其他开发者带来麻烦。

四、常见问题与解决方案

1. “我推送代码时被拒绝了!”

bash

# 可能是因为远程仓库有新提交,先拉取最新代码
git pull origin feature/amazing-feature

# 解决冲突后重新推送
git push origin feature/amazing-feature

2. “我想撤销上一次提交!”

bash

# 撤销上一次提交,但保留更改
git reset --soft HEAD~1

# 彻底撤销上一次提交及更改
git reset --hard HEAD~1

3. “我提交了代码到错误的分支!”

bash

# 保存当前更改
git stash

# 切换到正确的分支
git checkout correct-branch

# 应用之前的更改
git stash apply

五、团队协作实用命令小抄

bash

# 查看当前状态
git status

# 查看提交历史
git log --oneline --graph

# 查看某个文件的修改历史
git blame filename

# 临时保存工作区更改
git stash

# 恢复临时保存的更改
git stash pop

# 放弃所有本地更改
git checkout -- .

结语

Git协作开发看似复杂,其实掌握了核心流程后非常直观。记住这个基本流程:fork → clone → branch → develop → pull → push → PR,你就能应对大部分团队协作场景。

随着你的实践经验增加,你会发现Git不仅是一个版本控制工具,更是提高团队协作效率的得力助手。希望这份指南能帮助你在团队项目中游刃有余!

如果你有任何问题或建议,欢迎在评论区留言讨论!