Git与GitHub入门指南:从版本控制到团队协作的完整工作流
2026/8/26 14:34:35 网站建设 项目流程

1. 从“仓库”到“协作”:为什么你需要Git和GitHub?

如果你刚开始接触编程,或者刚加入一个需要写代码的团队,大概率会听到两个词:Git 和 GitHub。它们经常被一起提及,以至于很多人会混淆。简单来说,Git是一个工具,GitHub是一个网站。这就像Word是一个文档编辑软件,而Google Docs是一个可以让你在线协作编辑Word文档的平台。

Git是一个版本控制系统。想象一下,你写一份重要的报告,每次修改都“另存为”一个新文件,文件名可能是“报告_v1.docx”、“报告_v2_修改了第三段.docx”、“报告_最终版.docx”、“报告_最终版_真的不改了.docx”。很快,你的文件夹就会一团糟,而且你很难说清楚“最终版”和“真的不改了”之间到底改了哪里。Git就是来解决这个问题的。它像一个超级智能的“时光机”,帮你记录项目里每一个文件每一次的改动(我们称之为“版本”),你可以随时回到任何一个历史版本,也可以清晰地看到每次修改具体改了哪一行代码。它运行在你的电脑上,是本地工具。

GitHub则是一个基于Git的代码托管平台。它把Git的威力放到了网上。你可以把你的“时光机”记录(也就是代码仓库)上传到GitHub,这样就有了一个永久的、在线的备份。更重要的是,它让多人协作写代码变得极其简单。你可以看到别人在改什么,可以把自己的修改提议给别人审阅,可以一起解决代码冲突,就像在线协作编辑文档一样自然。对于个人开发者,它也是一个绝佳的展示窗口,你的GitHub主页就是你的技术简历。

所以,这个教程的目标很明确:帮你从零开始,安装好Git这个工具,学会最基本的命令来管理你的代码时光机,然后学会使用GitHub这个平台来备份和分享你的工作。无论你是想保存自己的学习笔记,还是想参与开源项目,这都是第一步。

2. 环境搭建:安装Git与配置你的身份

万事开头难,但安装Git其实很简单。这一步的目标是在你的电脑上装好Git命令行工具,并告诉Git你是谁——这很重要,因为每一次代码提交都会记录下提交者的信息。

2.1 下载与安装Git

Git是跨平台的,在Windows、macOS和Linux上都可以安装。

对于Windows用户:这是最需要指导的群体。不要从各种第三方网站下载,直接访问Git的官方下载页面。由于网络原因,官方下载可能较慢,这里有一个非常实用的技巧:使用国内的镜像源。例如,你可以访问淘宝的NPM镜像站,它提供了Git的Windows安装包。

  1. 打开浏览器,搜索“git for windows 淘宝镜像”。
  2. 通常第一个结果就是。点击进入,你会看到一系列以.exe结尾的安装文件。
  3. 选择最新版本的Git-x.x.x-64-bit.exe下载(x.x.x是版本号)。这是64位系统的安装程序,如果你的电脑是32位(现在很少见),则选择32位版本。
  4. 下载完成后,双击运行。安装过程基本就是一路点击“Next”。
  • 在“Select Components”界面,建议勾选“Windows Explorer integration”下的所有选项,这会在右键菜单中添加Git功能,很方便。
  • 在“Choosing the default editor”界面,默认是Vim。如果你是新手,强烈建议在下拉菜单中选择你熟悉的编辑器,比如“Visual Studio Code”或“Notepad++”。Vim对新手极不友好,容易卡住。
  • 在“Adjusting your PATH environment”界面,选择第二项“Git from the command line and also from 3rd-party software”。这会将Git添加到系统环境变量,让你能在任何地方(如CMD、PowerShell)使用git命令。
  • 其他选项保持默认即可,一路“Next”直到安装完成。

对于macOS用户:最简单的方法是安装Xcode Command Line Tools。打开终端(Terminal),输入命令git --version。如果系统没有安装Git,它会提示你安装,你只需跟着提示操作即可。或者,你也可以使用Homebrew这个包管理器来安装:在终端输入brew install git

对于Linux用户(如Ubuntu):打开终端,使用包管理器安装。对于基于Debian的系统(如Ubuntu),命令是sudo apt update && sudo apt install git

安装完成后,在任何地方打开命令行(Windows上是CMD或PowerShell,macOS/Linux是终端),输入git --version。如果能看到类似git version 2.xx.x的版本信息,恭喜你,安装成功了。

2.2 必不可少的初始配置:告诉Git你是谁

安装好Git后,第一件事不是写代码,而是配置你的用户信息。这个信息会烙印在你每一次的代码提交记录里,是你在代码世界里的“身份证”。

打开命令行,输入以下两条命令,将示例邮箱和用户名替换成你自己的。通常,邮箱建议使用你注册GitHub时用的邮箱,这样GitHub能正确关联你的提交。

git config --global user.name "Your Name" git config --global user.email "your.email@example.com"

这里的--global参数表示这是全局配置,对这台电脑上所有的Git仓库都生效。你可以用git config --list命令来查看所有已生效的配置。

注意:这个配置非常重要。如果你不设置,或者设置错误,后续的提交记录就会显示一个奇怪的默认身份,当你想把代码推送到GitHub时可能会遇到权限问题。这也是很多新手第一次提交代码到GitHub失败的原因之一——本地提交者信息和GitHub账户对不上。

3. 核心概念与本地仓库实战

在开始敲命令之前,我们需要理解几个最核心的概念。你可以把它们想象成一套“工作流程”中的不同区域。

  • 工作区 (Working Directory):就是你电脑上能直接看到的项目文件夹,你在这里新增、修改、删除文件。
  • 暂存区 (Staging Area / Index):这是一个中间区域。你可以把工作区里准备要提交的改动,先“挑选”出来,放到这里。它就像是一个快递打包台,你把要寄走的物品(修改的文件)先放上去。
  • 本地仓库 (Local Repository):位于你项目根目录下一个隐藏的.git文件夹里。当你执行提交操作时,暂存区里的所有“打包好的物品”就会被永久记录到这里,生成一个版本快照(Commit)。

现在,让我们在一个真实的文件夹里走一遍这个流程。

3.1 创建你的第一个Git仓库

首先,在你的电脑上找一个合适的位置,新建一个文件夹,命名为my-first-git-project。然后打开命令行,进入到这个文件夹。

cd /path/to/your/my-first-git-project

接下来,我们把这个普通文件夹变成一个Git仓库。输入命令:

git init

你会看到提示Initialized empty Git repository in ...。这时,用ls -la命令(Windows的PowerShell用dir -force)查看,会发现多了一个隐藏的.git文件夹。这就是Git仓库的本体,里面记录着所有的版本信息。千万不要手动去修改或删除它!

3.2 基础命令四部曲:status, add, commit, log

现在,在my-first-git-project文件夹里,新建一个文本文档,命名为README.md,用记事本或任何编辑器打开,在里面写上一行字:“这是我的第一个Git项目。” 保存。

第一步:查看状态 (git status)任何时候,当你不知道Git仓库里发生了什么,就输入git status。这是你最常用的命令之一。

git status

输出会显示,你有一个“Untracked files”(未跟踪的文件),名叫README.md。Git在告诉你:“我注意到这个新文件了,但我还没开始管理它。”

第二步:添加文件到暂存区 (git add)我们决定让Git开始管理这个文件。使用git add命令将它放入暂存区。

git add README.md

如果你想一次性添加所有当前目录下的新文件和修改过的文件,可以使用git add .(注意add后面有一个点)。再次运行git status,你会看到README.md出现在了 “Changes to be committed” 下面,表示它已经在暂存区,等待被提交。

第三步:提交更改 (git commit)现在,把暂存区里的内容打包,创建一个永久的版本记录。提交时必须附上一句说明,告诉未来的自己(或队友)这次提交做了什么。

git commit -m "添加项目说明文档 README.md"

-m参数后面跟着的字符串就是提交信息。提交信息务必简洁、清晰,例如“修复了登录按钮点击无效的bug”、“新增用户注册API接口”。好的提交信息能让历史记录一目了然。

提交成功后,你会看到类似[master (root-commit) xxxxxxx]的提示,其中xxxxxxx是这次提交的唯一ID(哈希值)。

第四步:查看历史记录 (git log)提交之后,怎么查看我们都有哪些“历史版本”呢?用git log

git log

你会看到一个列表,显示了提交的哈希值、作者、日期以及你写的提交信息。这就是你的代码时光机日志。按q键可以退出这个日志视图。

让我们再修改一次README.md,在末尾加上一行“学习Git很有趣!”,然后保存。重复这个过程:

git status # 查看状态,会显示README.md被修改了 git add README.md # 将修改添加到暂存区 git commit -m "更新README,表达学习感受" # 提交第二次修改 git log # 现在log里会有两条提交记录了

至此,你已经掌握了Git最核心的本地操作循环:修改 ->git status查看 ->git add暂存 ->git commit提交。

4. 连接远程世界:GitHub仓库操作

本地玩转之后,我们需要把代码备份到云端,并实现协作。这就需要用上GitHub。

4.1 创建GitHub仓库与远程连接

首先,你需要有一个GitHub账号(注册过程略过)。登录后,点击页面右上角的“+”号,选择“New repository”。

  • 在“Repository name”里输入仓库名,比如my-first-git-project
  • 描述(Description)可选。
  • 选择公开(Public,代码所有人可见)或私有(Private,仅自己或指定协作者可见)。
  • 非常重要:不要勾选“Initialize this repository with a README”。因为我们本地已经有一个README.md了,如果勾选,GitHub会创建一个空的README,导致两边不一致,在第一次推送时会产生冲突。对于已有本地仓库的情况,保持这个选项为空。
  • 点击“Create repository”。

创建成功后,你会看到一个快速设置页面。因为我们本地已有仓库,所以关注第二部分“...or push an existing repository from the command line”。你会看到两条命令,类似这样:

git remote add origin https://github.com/你的用户名/my-first-git-project.git git branch -M main git push -u origin main

这三条命令的意思是:

  1. git remote add origin [url]: 给你的本地仓库添加一个远程仓库地址,并给它起个别名叫origin(这是约定俗成的默认名)。
  2. git branch -M main: 将你本地当前的分支(默认可能是master)重命名为main(GitHub现在的默认主分支名是main)。
  3. git push -u origin main: 将本地main分支的代码推送到远程origin仓库。-u参数是--set-upstream的简写,它建立了本地main分支和远程origin/main分支的追踪关系,这样以后在这个分支上直接输入git pushgit pull就可以了,不用再指定远程和分支名。

现在,回到你的本地命令行,依次执行这三条命令。执行git push时,可能会弹出窗口让你登录GitHub账户进行授权,按照提示操作即可。

刷新你的GitHub仓库页面,你会发现本地的代码(包括两个提交记录)已经全部出现在了网上!

4.2 拉取、推送与克隆

现在你有了本地和远程两个仓库,它们之间需要同步。

  • 推送 (git push):将你本地的新提交,上传到远程仓库。就像你写完作业,把最新版本上传到网盘。命令是git push(如果已经用-u设置了上游分支)或git push origin main

  • 拉取 (git pull):将远程仓库别人(或你自己在别的电脑上)的新提交,下载到本地并合并。就像你从网盘下载最新的作业版本到本地电脑。命令是git pullgit pull实际上是git fetch(获取远程更新)和git merge(合并到本地)两个操作的组合。

  • 克隆 (git clone):这是获取一个已有远程仓库的完整副本到本地的操作。比如你想参与一个开源项目,第一步就是克隆它。命令是git clone [仓库地址]。这会在当前目录下创建一个以仓库名命名的文件夹,里面包含了完整的代码和历史记录。例如:

    git clone https://github.com/某个开源项目/项目名.git

4.3 处理远程连接中的常见问题

问题:fatal: not a git repository这个错误意味着你当前所在的目录不是一个Git仓库(没有.git文件夹)。解决方法是cd到正确的项目根目录下再执行Git命令。

问题:推送失败,提示权限被拒绝 (Permission denied)这通常是因为远程仓库地址认证失败。

  • 检查远程地址:git remote -v
  • 如果你用的是HTTPS地址,可能是密码或令牌过期。现在GitHub推荐使用个人访问令牌(Personal Access Token, PAT)代替密码进行HTTPS操作。你需要在GitHub账号设置中生成一个PAT,并在推送时用它代替密码。
  • 更推荐的方式是使用SSH密钥认证,一劳永逸。生成SSH密钥对,把公钥添加到GitHub账号,然后将远程仓库地址改为SSH格式(如git@github.com:用户名/仓库名.git)。

问题:推送失败,提示非快进 (non-fast-forward)这是因为远程仓库有你本地没有的新提交(比如你在网页上直接改了README)。Git为了保护这些提交不被覆盖,拒绝了你的推送。

  • 解决方法是先拉取远程的更新:git pull。这可能会自动合并,也可能产生冲突需要手动解决(见下文)。解决完冲突并提交后,再执行git push

5. 分支管理:并行开发的利器

分支是Git的“杀手级”功能。你可以把分支想象成一条独立的时间线。默认情况下,你工作在main(或master)分支上,这是你的“主线剧情”。

假设你要开发一个新功能,但又不想影响主线上稳定的代码。这时,你可以创建一个新的分支,在这个分支上大胆修改,完成后再合并回主线。

5.1 分支的创建、切换与合并

  1. 创建并切换到一个新分支(比如叫feature-login):

    git checkout -b feature-login

    这条命令等价于先git branch feature-login(创建分支),再git checkout feature-login(切换分支)。现在你就在feature-login分支上了,可以开始开发新功能。

  2. 在新分支上工作:添加文件,修改代码,正常进行addcommit。所有这些操作都只存在于feature-login分支上,main分支丝毫未动。

  3. 切换回主分支

    git checkout main

    你会发现,刚才在feature-login分支上做的修改全部“消失”了(其实只是被隐藏了),目录恢复到了main分支的状态。

  4. 合并分支:当feature-login分支的功能开发测试完毕,我们可以把它合并到main分支。

    • 首先,确保你当前在main分支上(git checkout main)。
    • 然后执行合并命令:
      git merge feature-login
    • 如果合并顺利,Git会进行“快进合并”或创建一个新的“合并提交”。此时,feature-login分支上的所有修改就都应用到main分支上了。
  5. 删除已合并的分支(可选):

    git branch -d feature-login

    分支的使命完成,可以删除了,保持仓库的整洁。

5.2 冲突:当修改撞车时

合并并不总是风平浪静。如果main分支和feature-login分支都修改了同一个文件的同一行代码,Git就无法自动决定该保留哪个版本,这时就会产生冲突

当执行git merge遇到冲突时,Git会暂停合并,并标记出文件中冲突的位置。打开冲突文件,你会看到类似这样的标记:

<<<<<<< HEAD 这是主分支上的内容。 ======= 这是feature分支上的内容。 >>>>>>> feature-login

<<<<<<< HEAD=======之间是当前分支(main)的内容,=======>>>>>>> feature-login之间是要合并进来的分支(feature-login)的内容。

解决冲突的步骤:

  1. 不要慌。冲突是协作中的正常现象。
  2. 用编辑器打开冲突文件,仔细查看冲突部分。
  3. 手动决定保留哪一段内容,或者将两段内容整合成一段新的、正确的代码。
  4. 删除Git添加的冲突标记(<<<<<<<=======>>>>>>>)。
  5. 保存文件。
  6. 将解决冲突后的文件添加到暂存区:git add [文件名]
  7. 完成合并提交:git commit。此时Git会为你预填一个合并提交信息,通常直接保存即可。

实操心得:解决冲突时,最好和产生冲突的同事沟通一下,理解对方修改的意图,共同决定最终的代码。使用git status可以随时查看哪些文件处于冲突状态(Unmerged paths)。一些高级的代码编辑器(如VSCode)或IDE(如IntelliJ IDEA)提供了图形化的冲突解决工具,能更直观地对比和选择,对新手非常友好。

6. 图形化助手:Git Desktop快速上手

对于刚入门的新手,或者不喜欢命令行的开发者,GitHub官方出品的Git Desktop是一个极佳的选择。它把Git的核心操作都做成了直观的按钮和菜单,大大降低了学习曲线。

6.1 安装与基础设置

从GitHub Desktop官网下载安装。安装后打开,首先需要用你的GitHub账号登录。登录后,你可以选择“Clone a repository from the Internet”来克隆一个已有仓库,或者“Create a new repository”在本地新建一个。

它的界面通常分为几个主要区域:

  • 左侧:仓库列表和分支列表。
  • 中间上部:文件变更列表,清晰地展示了哪些文件被修改、新增或删除。
  • 中间下部:差异对比视图,可以逐行查看具体修改了什么。
  • 左下角:提交信息输入框和提交按钮。
  • 右上角:推送、拉取、获取等远程操作按钮。

6.2 用Git Desktop完成核心工作流

  1. 查看与暂存更改:当你修改了文件后,Git Desktop中间区域会自动显示出变更。每个文件前面都有一个复选框,勾选它,就相当于执行了git add,将文件放入暂存区。你可以选择部分文件提交,这比命令行的git add .更精细。

  2. 提交:在左下角输入提交信息,然后点击“Commit to main”(或当前分支名),就完成了一次提交。这相当于git commit -m “...”

  3. 历史记录:点击顶部菜单栏的“History”,可以非常直观地看到所有提交记录的图谱,包括分支的创建、合并等,比git log --graph的命令行输出好看得多。

  4. 分支操作:点击左上角的“Current branch”按钮,可以查看所有分支,轻松地创建新分支、切换分支。合并分支通常通过发起“Pull Request”(在Git Desktop中可能以“Merge into current branch”的形式出现)来完成,过程有图形引导。

  5. 推送与拉取:界面右上角会明确显示本地分支领先或落后于远程分支多少个提交。点击“Push origin”或“Pull origin”按钮即可完成同步。

Git Desktop的优势与局限

  • 优势:直观,易上手,避免了记忆命令;图形化展示分支和历史非常清晰;解决冲突时有直观的对比工具。
  • 局限:无法执行所有高级的Git命令;在处理非常复杂的仓库历史或需要精细操作时,仍需命令行辅助。

对于绝大多数日常开发场景(提交、拉取、推送、创建/合并分支、解决简单冲突),Git Desktop已经完全够用。我个人的建议是,新手可以从Git Desktop开始,建立对Git工作流的直观理解。当你遇到Desktop无法处理的复杂情况,或者想追求更高效率时,再回头学习对应的命令行操作,这样会事半功倍。

7. 进阶技巧与高效工作习惯

掌握了基本操作后,一些好的习惯和技巧能让你的Git之旅更加顺畅。

7.1.gitignore文件:让仓库保持整洁

你肯定不想把编译产生的临时文件、本地配置文件(如存有数据库密码的)、IDE项目文件、系统文件(如.DS_Store)等提交到仓库里。.gitignore文件就是用来告诉Git忽略哪些文件和文件夹的。

在你的项目根目录下创建一个名为.gitignore的文件(注意开头有个点)。在里面按行写入需要忽略的文件模式。例如,一个Python项目的.gitignore可能包含:

# 忽略Python的字节码和缓存 __pycache__/ *.py[cod] # 忽略虚拟环境目录 venv/ env/ # 忽略IDE配置文件 .vscode/ .idea/ # 忽略系统文件 .DS_Store Thumbs.db

创建并配置好.gitignore后,再执行git add .git commit,那些被忽略的文件就不会被跟踪了。最佳实践是在创建仓库的初期就设置好.gitignore

7.2 修改最后一次提交

刚提交完发现提交信息写错了,或者漏了一个小文件?可以使用--amend参数修改最后一次提交。

  • 修改提交信息:git commit --amend -m “新的提交信息”
  • 添加漏掉的文件:先git add 漏掉的文件,然后git commit --amend --no-edit--no-edit表示不修改提交信息,只追加文件)。

注意:--amend操作会改变最后一次提交的哈希值,相当于“重写”了那次提交。如果这个提交已经推送到了远程仓库,强制推送 (git push -f) 可能会给协作者带来麻烦。因此,只对尚未推送的本地提交使用--amend

7.3 储藏工作现场 (git stash)

这是一个非常实用的功能。假设你正在feature-A分支上开发到一半,突然需要紧急切换到main分支去修复一个bug。但你现在的工作还没完成,不能提交。这时就可以使用git stash

  • git stash:将当前工作区和暂存区的所有修改“储藏”起来,让你的仓库恢复到上一次提交的干净状态。然后你就可以安心地切换分支去干活了。
  • git stash list:查看所有的储藏列表。
  • git stash pop:恢复最近一次储藏的内容,同时从储藏列表中删除它。恢复后,你之前未完成的修改就又回来了。

7.4 理解git fetchgit pull的区别

前面提到git pull = git fetch + git merge。具体来说:

  • git fetch origin:这个命令只会从远程仓库origin下载最新的提交历史和分支信息到你的本地仓库,但不会自动合并到你的当前工作分支。它让你知道远程发生了什么变化。
  • git merge origin/main:在fetch之后,你可以手动将远程分支的更新合并到本地分支。
  • git pull origin main:一次性完成fetchmerge

为什么有时要分开用?因为git pull是自动合并,有时你可能想在合并前,先看看远程到底更新了什么,或者基于远程更新先创建一个新分支来测试。这时先fetch,再决定如何操作,是更安全、更可控的工作流。

从安装配置到本地操作,再到连接GitHub进行远程协作,最后通过分支管理应对复杂开发,并介绍了图形化工具和进阶技巧。Git的学习曲线前期可能有些陡峭,但一旦掌握了这些核心概念和操作,它将成为你日常开发中不可或缺的得力助手。最好的学习方式就是立刻动手,创建一个仓库,按照这个流程走一遍。遇到错误不要怕,善用git status查看状态,善用搜索引擎,你遇到的问题,全世界99%的开发者都遇到过。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询