个人练手与前端学习用,非正式站点。

文章列表

Git 入门:从安装到协作

本文面向零基础读者,介绍 Git 是什么、如何安装与做个人版本管理,以及如何在 VS Code 里操作、如何连接 GitHub/Gitee,并对团队协作用法有初步概念。 文中命令与行为说明均以 Git 官方手册GitHub 文档Gitee 帮助Visual Studio Code 文档 为核对依据;托管平台界面与认证政策会变,请以各平台当前页面为准。

阅读本文前

下文示例多在终端(命令行)中输入命令。你需要会:打开终端、用 cd 进入某个文件夹、知道当前路径里有哪些文件(ls 在 Linux/macOS,dir 在 Windows CMD 等)。

  • Windows:可在开始菜单搜索「终端」「PowerShell」或「Git Bash」(安装 Git for Windows 后);也可在资源管理器某文件夹地址栏输入 cmd 回车。
  • macOS:「聚焦」搜索「终端」Terminal;或系统自带说明见 Apple 支持文档。
  • Linux:常见发行版用 Ctrl+Alt+T 或应用程序里的「终端」。

若完全未接触过命令行,可先阅读 Mozilla 的入门材料: 命令行速成课(MDN)(外链内容以 MDN 为准)。

建议阅读顺序

  1. Git 是什么、解决什么问题
  2. 核心概念(三区、分支)
  3. 安装与首次配置
  4. 命令行:个人日常
  5. 在 VS Code 中使用 Git
  6. GitHub、Gitee 与远程仓库
  7. 安全与礼仪
  8. 团队里 Git 在干什么
  9. 小结与两条个人最小路径
  10. 参考与延伸阅读

术语速查

SSH
一种远程登录与加密传输方式。Git 可用 git@github.com:用户名/仓库.git 这类 SSH URL;需在本机生成密钥并把公钥加到托管网站。详见各平台「SSH 密钥」帮助页。
HTTPS
基于 HTTP 的加密访问。Git 远程 URL 形如 https://github.com/用户名/仓库.git;推送时常见用法是个人访问令牌(PAT)等,具体以平台文档为准。
PAT(Personal Access Token)
个人访问令牌,常用于 HTTPS 推送时代替密码(是否必须、如何创建,以 GitHub / Gitee 当前说明为准)。
origin
默认的远程仓库别名,不是魔法名字;可用 git remote -v 查看实际 URL。见 git-remote
HEAD
通常指向当前检出分支上的最新提交;具体定义见 gitglossary
远程跟踪分支(remote-tracking branch)
origin/main,表示「你本地记录的、远程 main 上次见到时的位置」。与本地分支 main 可能不同步,需 fetch/pull 更新。见 Pro Git:远程分支

Git 是什么、解决什么问题

Git 是分布式版本控制系统:每个克隆下来的仓库里都有完整历史,可在本地提交、分支、合并,再与远程交换。 与「复制整个项目文件夹做备份」相比,Git 记录的是提交(commit)组成的历史,便于对比差异、回到某次状态、多人并行修改后合并。 概念与术语请以 Git 文档总览Pro Git(中文版) 为准。

核心概念

工作区、暂存区、版本库

日常可记住三层(详见 Pro Git:记录仓库的历史):

  • 工作区(Working tree):你直接编辑文件的地方。
  • 暂存区(Staging area / Index):下一次提交要包含哪些修改的清单;用 git add 把改动放入暂存区。
  • 版本库(Repository):存在项目目录下的 .git 中,保存提交对象与分支等元数据。
示意图:工作区经 git add 到暂存区,再 git commit 到版本库
图 1:工作区、暂存区与版本库的关系(示意;细节以官方文档为准)。

分支与 HEAD

分支是指向某一提交的可移动指针;在分支上新增提交时,该分支指针会前进。 git branchgit switch 的说明见官方手册。

示意图:提交链与 main、topic 分支指针
图 2:分支是指针(示意)。

安装与首次配置

获取 Git

  • Windows:从 git-scm.com/download/win 下载安装「Git for Windows」(含 Git Bash)。安装后在终端执行 git --version,应显示版本号。见 git
  • macOS:可从上述官网下载安装包,或用 Apple 开发者工具/Xcode Command Line Tools 等途径;以 官方下载页 与当前系统说明为准。
  • Linux:通过发行版包管理器安装,例如 Debian/Ubuntu 常见为 sudo apt install git;命令与包名以你所用发行版文档为准。

首次配置(全局)

提交会记录作者信息,请至少设置姓名与邮箱(与托管平台展示可一致):

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

更多选项见 git-config,例如 init.defaultBranch 指定 git init 的默认初始分支名;core.autocrlf 与换行符有关,Windows 与 Linux/macOS 协作时常需阅读说明再设,避免「一刀切」结论。

HTTPS 推送时密码/令牌如何保存,与「凭据助手(credential helper)」有关,见 gitcredentials 与平台文档。

命令行:个人日常

下列命令的权威说明均在 Git 手册 对应页面;此处只列常见用途。

创建仓库与克隆

  • git init:在当前目录新建仓库。
  • git clone <url>:克隆远程仓库到本地,默认会把远程登记为 origin(可用 git remote -v 查看)。

日常循环:状态、暂存、提交

  • git status:查看工作区与暂存区状态。
  • git add:将改动加入暂存区;git add -p 可交互挑选片段(补丁模式)。
  • git commit -m "说明":把暂存区内容做成一次提交。
  • git log--oneline 紧凑显示;--graph 便于看分支历史。

查看差异

  • git diff:默认常表示工作区相对暂存区;git diff --staged(或 --cached)表示暂存区相对上一次提交。

分支、切换、合并

  • git branch:列出或创建分支。
  • git switch:切换分支(Git 2.23 起提供;更早版本常用 git checkout 切换分支,旧教程仍常见)。
  • git merge:合并分支;可能是快进(fast-forward)或产生合并提交,视历史而定,见手册。

撤销与恢复

  • git restore:恢复工作区或取消暂存(2.23+;旧教程可能用 git checkoutgit reset 达成类似效果,以手册为准)。
  • git reset--soft / --mixed / --hard 行为不同;--hard 会丢弃工作区与暂存区中未提交的修改,使用前务必理解手册。

在已与他人共享的分支上改写历史(如强推)可能影响他人克隆与拉取。git push --force 等操作请仅在理解后果时使用;见 git-push 与团队规范。

暂存与忽略

  • git stash:临时保存未提交改动,便于切换分支或拉取;选项见手册。
  • .gitignore:忽略无需纳入版本控制的文件(如构建产物、本地配置);模式规则见文档。

标签

git tag 常用于标记发布点;轻量标签与附注标签区别见手册。

fetchpull

git fetch:从远程取回更新,并更新你本地的远程跟踪分支(如 origin/main),不会自动合并进你当前工作分支。 git pull:在默认配置下相当于 git fetch 再与当前分支合并;也可配置为 rebase 等,以手册与本地配置为准,不要记成「pull 永远等于某一种固定命令」。

示意图:fetch 更新远程跟踪分支;pull 在 fetch 之后合并到当前分支
图 4:fetchpull 关系示意(默认行为与可配置项以官方手册为准)。

合并冲突

当 Git 无法自动合并时,会在文件中留下冲突标记,例如 <<<<<<<=======>>>>>>>。需人工编辑后再次 addcommit。见 git-mergePro Git:合并冲突

在 VS Code 中使用 Git

VS Code 内置源代码管理视图,无需安装扩展也可完成暂存、提交、查看差异等。功能与界面可能随版本变化,请以 Source Control in VS Code 官方文档为准。

线框图:左侧活动栏、更改列表、提交消息与提交按钮位置示意
图 3:源代码管理区线框示意(实际菜单与按钮以你所安装的 VS Code 版本为准)。

与命令行的粗略对应:

  • 暂存(Stage)≈ git add
  • 提交(Commit)≈ git commit
  • 同步/拉取/推送等按钮 ≈ git pull / git push(具体以界面标签与官方说明为准)

扩展如 GitLens 可增强行内 blame、历史浏览等,属可选,以扩展市场说明为准。

GitHub、Gitee 与远程仓库

远程与常用命令

  • git remote:查看、添加、修改远程别名与 URL。
  • git push:将本地提交推送到远程;首次可 git push -u origin <分支名> 设置上游。
  • git pull / git fetch:见上文。

默认分支名可能是 mainmaster,以你在网页上看到的仓库为准。

HTTPS 与个人访问令牌

使用 HTTPS URL 时,推送身份验证方式以各平台当前安全要求为准,例如个人访问令牌(PAT)。请勿在文章或截图中泄露令牌。详见 GitHub DocsGitee 帮助

SSH 公钥

使用 SSH URL 前,通常在本机用 OpenSSH 的 ssh-keygen 生成密钥对,把公钥复制到 GitHub/Gitee 账户设置中;步骤与选项以各平台说明为准,例如 GitHub:生成 SSH 密钥、 Gitee 帮助站内「SSH 公钥」相关条目。 主机指纹提示与首次连接注意事项见各平台文档;具体按钮位置以各平台帮助为准: GitHub:SSHGitee 帮助中心(站内搜索「SSH 公钥」)。

检测连接常用(主机名以平台文档为准):如 ssh -T git@github.com;Gitee 主机名见 Gitee 文档。

在网页上建库后推送

在 GitHub/Gitee 网页创建空仓库后,按页面提示在本地已有仓库执行 git remote add origin <url>,再 git push -u origin main(分支名以页面为准)。 若远程 URL 变更,可用 git remote set-url origin <新 URL>

Fork、Pull Request / Merge Request

Fork 是在托管平台上复制他人仓库到你名下;你给 Fork 增加远程时常命名为 upstream 指向原项目,便于同步。见 GitHub:Fork、 Gitee 帮助中「Fork / Pull Request」相关条目。

Pull Request(PR)或 Gitee 的 Pull Request / Merge Request 是请求把某分支的改动合并进目标仓库的流程,常与代码审查一起使用;细节以平台文档为准。

安全与礼仪

  • 不要把密码、私钥、API 密钥提交进仓库;用 .gitignore 与平台密钥管理实践。
  • 对多人使用的分支谨慎使用强制推送;需要时先沟通。
  • 大二进制或超大文件可考虑 Git LFS 等方案(独立于 Git 核心,以项目文档为准)。
  • 保护分支、审查规则等由托管平台提供,见 GitHub:Protected branches、 Gitee 帮助中「保护分支」相关说明。

团队里 Git 在干什么

团队常用功能分支把各人工作与主线隔离,通过 Pull Request / Merge Request 做代码审查后再合并,减少直接推坏主线的风险。 多人同时修改同一文件的相邻区域时,更容易出现合并冲突,需要在本地或网页上解决后再合并。

把提交历史整理成直线时,有人用 merge,有人用 rebase以项目约定为准,不要把它当成唯一标准。见 git-rebasegit-merge

小结:两条个人最小路径

路径 A:只在本机做版本记录

  1. 在项目目录 git init
  2. 编辑文件 → git addgit commit,反复循环
  3. 需要时用 git branch / git switch 做分支,用 git merge 合并

路径 B:本机 + 远程(GitHub/Gitee 等)备份与同步

  1. 在网站创建仓库,按提示 git remote addgit push
  2. 另一台电脑:用 git clone 拉下仓库;之后在该机上 git pull 取更新、git push 上传你的提交

同一人在两台电脑上维护自己的仓库,本质也是 clone / pull / push,注意不要在未拉取最新提交前强行覆盖远程(除非你明确在做什么)。

参考与延伸阅读

插图说明:本站文内图 1~4 为自绘 SVG,仅作示意;精确行为以 Git 与各平台官方文档为准。