news 2026/7/10 9:16:50

Git与GitHub新手完全操作手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git与GitHub新手完全操作手册

Git 与 GitHub 从零到实战 —— 新手完全操作手册

本文面向完全零基础的新手,从概念到命令,从本地到远程,手把手教你使用 Git 和 GitHub。
所有命令均附有详细解释,放心跟着敲。


第一部分:Git 是什么?为什么要学?

Git是一个分布式版本控制系统,简单说就是能帮你记录文件的每一次修改,像游戏存档一样,你可以随时回到任意一个历史版本。
它还能让多人同时协作开发,各自修改,最后合并,互不干扰。

GitHub是一个基于 Git 的代码托管平台,相当于把 Git 仓库放在云上,方便备份和团队共享。

哪怕你只是为了下载开源项目,学会git clone也会比手动下载更“专业”且方便更新。


第二部分:安装与初始配置

2.1 下载安装 Git

  • 官网下载:Git - Install

  • Windows 用户下载.exe,一路默认安装即可。

  • 安装完成后,在任意文件夹空白处右键,如果出现Git Bash HereGit GUI Here,说明安装成功。

Git Bash是 Git 提供的命令行终端,我们所有操作都在它里面执行。
习惯用 Windows CMD 或 PowerShell 也可以,但本文统一用 Git Bash。

2.2 配置用户信息(全球唯一标识)

Git 每次提交都会记录“是谁”提交的,所以需要设置用户名和邮箱(只需做一次):

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

--global表示全局配置,对所有仓库生效。你也可以去掉--global为单个仓库单独配置。
这个信息会出现在你的提交日志中,建议和 GitHub 账号一致,方便关联。

查看是否配置成功:

(输入以下命令会出现你的名字和邮箱)

git config user.name git config user.email

2.3 配置默认编辑器(可选)

默认使用 Vim,新手不习惯可以改成记事本或 VSCode:

git config --global core.editor "code --wait" # 设为 VSCode

第三部分:核心概念 —— 四个区(仓库)

理解这四个区,就理解了 Git 的整个工作流:

区域说明
工作区 (Workspace)你电脑上能看到的项目文件夹,是你正在编辑的地方。
暂存区 (Staging Area)一个临时存放“即将提交”的修改的地方。你可以把部分修改放入暂存区,分批提交。
本地仓库 (Local Repository)在你电脑上的.git隐藏文件夹,保存所有历史提交记录。
远程仓库 (Remote Repository)托管在 GitHub/GitLab 等服务器上的仓库,用于备份和协作。

工作流程
工作区修改 →git add→ 暂存区 →git commit→ 本地仓库 →git push→ 远程仓库。
反过来:远程仓库 →git pull→ 本地仓库 →git checkout→ 工作区。


第四部分:本地基本操作(从零开始)

4.1 初始化一个仓库(git init)

可以先切换到你想要初始化仓库的地方,如

cd /d/git

创建一个空文件夹(例如my_project),进入后右键Git Bash Here,输入:

git init

你会看到提示Initialized empty Git repository,并且文件夹里多了一个.git隐藏文件夹(需要开启“显示隐藏项目”才能看到)。
这个.git就是你的本地仓库,千万不要乱删!

4.2 查看状态(git status)

任何时候想了解当前工作区和暂存区的状态,输入:

git status

它会告诉你哪些文件被修改了、哪些在暂存区、哪些还未跟踪。建议频繁使用

4.3 添加文件到暂存区(git add)

新建一个文件hello.txt,然后:

git add hello.txt # 添加单个文件 git add . # 添加当前目录下所有新/修改的文件(常用) git add *.c # 添加所有 .c 文件

此时再用git status,文件会变成绿色,表示已进入暂存区。

为什么要有暂存区?
因为你可以只选择部分修改提交,而不是一次性提交所有改动。比如你改了三个功能,但只想先提交其中一个,就可以只add那个文件。

🎯 一个小建议

每当你准备进行重要操作(比如切换分支、拉取代码、回退版本)之前,都可以先敲一遍git status,确保看到 “working tree clean” 再动手,这样能有效防止误操作丢失代码。这是一个非常好的习惯!

4.4 提交到本地仓库(git commit)

暂存区的内容确认无误后,提交到本地仓库(生成一个永久快照):

git commit -m "添加了hello.txt,内容为Hello World"

-m后面跟的是提交说明,务必写清楚本次改了什么,方便以后查看。
提交后,git status会显示“nothing to commit, working tree clean”。

如果不写-m,Git 会弹出编辑器让你写说明(用前面配置的编辑器)。

4.5 查看提交历史(git log)

git log # 完整日志(按 q 退出) git log --pretty=oneline # 一行显示,只显示哈希和说明 git log --oneline # 更简短的哈希 git log --graph # 图形化显示分支走向

每次提交都有一个唯一的 40 位哈希值(如7c20a4b...),用来标识版本。

4.6 查看文件差异(git diff)

想对比工作区和暂存区/本地仓库的区别:

git diff # 工作区 vs 暂存区 git diff --staged # 暂存区 vs 最新提交(即即将提交的内容) git diff HEAD # 工作区 vs 最新提交 git diff 分支1 分支2 # 比较两个分支

4.7 版本回退(git reset)

如果提交错了想回到上一个版本:

git reset --hard HEAD^ # 回退到上一次提交(HEAD^ 表示上一个,HEAD^^ 表示上上个) git reset --hard <版本号> # 回退到指定哈希值的版本

--hard丢弃工作区和暂存区的所有改动,慎用!如果想保留改动,用--soft--mixed

回退后,git log可能看不到被回退掉的提交了,但可以用git reflog查看所有操作记录,找回任意版本号。


第五部分:分支管理

分支让你可以并行开发多个功能,互不影响。默认分支叫mastermain

🌿 分支到底有什么用?我为什么要用它?

你可以把分支想象成平行宇宙或者草稿纸

  1. 主分支(master/main)是你项目的“正式发布版”,要求永远稳定、可运行。

  2. 其他分支是你的“实验区”或“草稿纸”。当你想要增加新功能、修 Bug,或者尝试一个冒险的想法时,直接在master上改是很危险的——万一改坏了,整个项目就崩溃了。

有了分支,你就可以这样做:

  • master拉一条新分支(比如叫devfeature-login)。

  • 在新分支上随便改代码、折腾实验,完全不影响master

  • 改好了、测试通过了,再把这个分支合并(merge)master

  • 如果改坏了,直接删除这个分支,重开一个就行,master依然是干净的。

🎯 举个生活中的例子

你写了一篇毕业论文(这是master分支)。
导师让你加一个实验数据,但你不知道加上去会不会把论文搞砸。
于是你复制了一份草稿(创建新分支),在草稿上拼命改。
如果改得很好,你就把草稿的内容抄回原稿(合并);
如果改砸了,直接把草稿扔了,原稿完好无损。

5.1 查看分支

git branch # 列出本地分支,当前分支前有 * 号 git branch -v # 更详细,包含最新提交信息

5.2 创建分支

git branch dev # 创建名为 dev 的分支(基于当前所在分支)

5.3 切换分支

git checkout dev # 切换到 dev 分支 git switch dev # 新命令,功能相同(更推荐)

5.4 创建并切换

git checkout -b feature # 创建 feature 分支并立即切换过去 git switch -c feature # 新命令

5.5 合并分支

假设你现在在master分支,想把dev的改动合并进来:

git merge dev

Git 会自动将dev的修改应用到master。如果两个分支修改了同一文件的同一行,就会产生冲突,需要手动解决。

5.6 删除分支

git branch -d dev # 删除已合并的分支 git branch -D dev # 强制删除(即使未合并)

第六部分:远程仓库(GitHub)操作

6.1 注册 GitHub 账号

访问 https://github.com,注册账号(需要验证邮箱)。

6.2 创建远程仓库

登录后,点击右上角+New repository
填写仓库名(如my_project),描述可选,选择公开/私有,然后点击Create repository
创建后会给出一些指引,我们按“已有本地仓库”的方式操作。

6.3 关联本地仓库与远程仓库(git remote add)

复制你新建仓库的HTTPSSSH地址(例如https://github.com/你的用户名/my_project.git)。
在本地仓库目录下执行:

git remote add origin https://github.com/你的用户名/my_project.git

如果提示fatal: remote origin already exists(远程别名已存在),说明你之前关联过别的地址。没关系,执行下面这行覆盖掉它:

git remote set-url origin https://github.com/你的用户名/my_project.git
  • origin是远程仓库的别名(可以自定义,但惯例叫 origin)。

  • 这个命令把本地仓库和远程仓库关联起来。

查看关联情况:

git remote -v # 显示远程仓库别名和地址

6.4 推送到远程(git push)

将本地master分支推送到远程仓库(第一次推送需要加-u建立追踪关系):

git push -u origin master
  • -u表示设置上游(upstream),以后再次推送只需git push即可。

  • 如果远程是空仓库,首次推送会自动创建master分支。

如果远程仓库已有内容(比如你创建时勾选了 README),推送可能被拒绝,需要先git pull合并。

6.5 克隆远程仓库(git clone)

如果想从 GitHub 下载一个项目到本地,不需要先init,直接:

git clone https://github.com/用户名/仓库名.git

这会在当前目录下创建一个以仓库名命名的文件夹,里面自动包含了.git和所有文件。
如果你想把项目放在指定文件夹:

git clone https://github.com/.../xxx.git 我的项目

6.6 拉取更新(git pull)

当远程仓库有新提交(别人推送了),你需要更新本地:

git pull origin master # 从远程 master 拉取并合并到当前分支

git pull等价于git fetch+git merge

6.7 抓取更新(git fetch)

如果你只想看看远程有哪些更新,但暂时不合并:

git fetch origin # 抓取所有分支的更新到 .git 中 git log origin/master # 查看远程分支的提交 git diff master origin/master # 比较本地和远程的差异

之后用git merge origin/master手动合并。


第七部分:解决冲突(Conflict)

冲突产生条件:两个人修改了同一个文件的同一行,或者一个人修改了文件并提交,另一个人也修改了同一文件,后拉取的人合并时 Git 无法自动决定保留哪个版本。

典型场景
你在本地修改了a.txt并提交,然后git pull拉取远程更新,发现远程也有对a.txt的修改且和你的位置重叠,Git 会提示冲突。

解决步骤

  1. 执行git pullgit merge,看到类似输出:

    Auto-merging a.txt CONFLICT (content): Merge conflict in a.txt Automatic merge failed; fix conflicts and then commit the result.
  2. 打开冲突文件a.txt,会看到类似内容:

    <<<<<<< HEAD 这是你本地的修改 ======= 这是远程的修改 >>>>>>> branch-name
    • HEAD=======之间是你的修改;

    • =======>>>>>>>之间是远程的修改。

  3. 手动编辑,删除标记符号,保留你希望的内容(可以全部保留、取其一或重新编写)。

  4. 保存文件后,执行:

    git add a.txt git commit -m "解决了冲突"

    冲突解决完毕,可以继续git push

建议:在团队协作时,尽量频繁git pull避免长时间不同步,减少冲突概率。


第八部分:标签(Tag)与暂存(Stash)

8.1 标签(标记版本发布)

给某个提交打一个易记的标签,比如v1.0

git tag v1.0 # 轻量标签 git tag -a v1.0 -m "版本1.0发布" # 附注标签(推荐)

推送到远程:

git push origin --tags

查看所有标签:git tag

8.2 暂存工作(git stash)

当你正在写代码,突然需要切换到其他分支修 Bug,但不想提交半成品:

git stash # 保存当前工作区和暂存区的改动,恢复到干净状态 git checkout bugfix # 切换分支修 Bug # 修完后切回来 git checkout 原分支 git stash pop # 恢复之前暂存的改动(并删除 stash 记录)

查看 stash 列表:git stash list
恢复特定 stash:git stash apply stash@{0}
删除特定 stash:git stash drop stash@{0}

🏷️ 1. 标签(Tag)——“游戏里的存档点”

场景类比:
你玩《超级马里奥》,每通过一个大关卡,你都会按一下“保存”键,并备注为“第一关通关存档”“拿到无限蘑菇存档”。以后你想重温这一关,直接读取这个存档名就行了,不用在一堆日期里乱翻。

在 Git 里有什么用?
你的代码每提交一次,Git 都会给你一串长长的版本号(比如8e86b65...),这串数字根本记不住。当你开发完一个重大功能,或者发布了第 1.0 版软件时,你打个标签叫v1.0

  • 好处:以后老板问你“去年发布的那个版本代码在哪?”,你不需要去翻几百条日志,直接执行git tag看到v1.0,轻轻一点就能穿越回那个版本。这在开源项目里极其常见(比如你下载的 Spring Boot 源码,到处都是v2.0.0v3.0.0)。

怎么用?
项目做完发布时:git tag -a v1.0 -m "第一个正式版本发布了"
同步到 GitHub:git push origin --tags(这样别人在网页上就能看到你的版本标签了)


🧹 2. 暂存(Stash)——“厨房里的‘先停手’按钮”

场景类比:
你正在厨房做红烧肉(切好肉了,刚下锅炒了一半,调料还没放),这时候快递小哥打电话说你有一个到付快递必须立刻下楼取
你会怎么做?你肯定先把燃气灶关掉(避免糊锅),把手擦干净(保持整洁),然后冲下楼取快递。等你回来,再把燃气灶打开,继续倒酱油炖肉。

在 Git 里有什么用?
你正在feature分支写一个新功能,代码写到一半,还没写完、还不能提交(提交了会影响别人)。这时候测试组突然跑来告诉你:“线上有个严重 Bug,赶快去master分支修!”

  • 不用 Stash 的后果:你硬切分支,Git 报错“你的修改会丢失,不让切”,导致你手忙脚乱。

  • 用 Stash 的操作:你执行git stash。Git 立马把你“半成品的红烧肉”从锅里铲出来放到冰箱里,你的代码区变得跟master分支一样干净。

  • 切换修 Buggit checkout master-> 修 Bug ->git commit -m "修好啦"

  • 切回来继续炒菜git checkout feature->git stash pop。你之前没写完的代码完美地回到了屏幕上,你接着继续写,就像什么都没发生过。

怎么用?
紧急切分支前:git stash(存好半成品)
修完回来继续写:git stash pop(把半成品拿回来继续改)


💡 总结一句话

  • Tag(标签):为了记住“好日子”(给重要的版本起个响亮的名字)。

  • Stash(暂存):为了应对“突发情况”(临时存起手头乱糟糟的代码,回来接着干)。

这两个命令是新手进阶为“老手”的标配,等你以后遇到突发 Bug 要切分支时,你会回来感谢git stash的!😄


第九部分:配置 SSH 免密登录(推荐)

使用 HTTPS 推送每次都要输入用户名和密码,很麻烦。用 SSH 可以免密。

9.1 生成 SSH 密钥

在 Git Bash 中输入:

ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"

一路回车(不设置密码),会在~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)。

9.2 添加公钥到 GitHub

  1. 复制公钥内容:cat ~/.ssh/id_rsa.pub然后复制全部。

  2. 登录 GitHub → 右上角头像 → Settings → SSH and GPG keys → New SSH Key。

  3. 粘贴公钥,取名(任意),保存。

9.3 修改远程地址为 SSH

如果你之前用的 HTTPS,可以修改:

git remote set-url origin git@github.com:用户名/仓库名.git

之后git push/pull就不需要密码了。


第十部分:新手常见场景全流程

场景1:首次上传本地项目到 GitHub

cd 项目文件夹 git init git add . git commit -m "首次提交" # 在 GitHub 新建仓库,复制仓库地址 git remote add origin https://github.com/你的用户名/仓库名.git git push -u origin master

场景2:下载并参与开源项目(fork + clone)

  1. 在 GitHub 上找到感兴趣的项目,点Fork到自己的账号下。

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

  3. 进入文件夹,新建分支开发:git checkout -b my-feature

  4. 修改代码,提交,推送:git push origin my-feature

  5. 在 GitHub 上发起 Pull Request(PR)。

场景3:同步远程最新代码

每天开始工作前:

git pull origin master # 或者 git fetch + git merge

场景4:撤销错误的提交(尚未 push)

如果刚刚commit了但发现错误,想撤销提交并保留修改:

git reset --soft HEAD^ # 撤回到提交前,修改保留在暂存区

如果想完全丢弃修改:

git reset --hard HEAD^

场景5:撤销已经 push 的提交

如果已经 push 到远程,想回退:

git reset --hard <正确的版本号> git push --force origin master # 强制覆盖远程(谨慎!团队协作慎用)

如果团队其他人已经拉取了你的错误提交,强制推送会给他们带来麻烦,所以最好用git revert生成一个反向提交。

场景6:使用 .gitignore 忽略不需要的文件

在项目根目录创建.gitignore文件,写入要忽略的模式,例如:

*.log temp/ .idea/

这样 Git 就不会追踪这些文件。


第十一部分:常用命令速查表

命令说明
git init初始化本地仓库
git status查看状态
git add <file>添加文件到暂存区
git add .添加所有修改到暂存区
git commit -m "message"提交到本地仓库
git log查看提交历史
git reflog查看所有操作记录(包括回退后的)
git diff查看工作区和暂存区的差异
git diff HEAD查看工作区和最新提交的差异
git reset --hard <版本号>回退到指定版本
git branch查看分支
git branch <name>创建分支
git checkout <name>切换分支
git checkout -b <name>创建并切换
git merge <name>合并分支到当前分支
git branch -d <name>删除分支
git remote add origin <url>关联远程仓库
git remote -v查看远程仓库地址
git push -u origin master首次推送并建立跟踪
git pull拉取并合并远程更新
git fetch抓取远程更新但不合并
git clone <url>克隆远程仓库
git stash暂存当前修改
git stash pop恢复暂存并删除记录
git tag <name>创建标签
git push --tags推送标签到远程

第十二部分:常见报错及解决

报错信息可能原因解决方法
fatal: not a git repository当前目录不是 Git 仓库执行git init或进入正确目录
Permission denied (publickey)SSH 密钥未添加或地址错误检查 SSH key 是否添加到 GitHub,或改用 HTTPS
failed to push some refs远程有更新,本地落后git pull再 push
CONFLICT (content)合并冲突手动解决冲突,然后 add+commit
Your branch is ahead of origin/master本地有未推送的提交执行git push

写在最后

以上内容涵盖了 Git 和 GitHub 日常使用中 90% 以上的场景。实践是学习 Git 最好的方式,建议你跟着命令一步步操作,遇到问题大胆搜索,因为 Git 的报错信息通常都很明确。

记住几点心法:

  • git status,随时掌握当前状态。

  • 提交前git diff确认改了什么。

  • 提交信息要清晰,方便日后回溯。

  • 经常git pull保持和远程同步。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 9:16:25

2026中国互联网大会新动向:FlagOS开源算力底座共建计划正式启动

2026年第二十五届中国互联网大会在北京举办&#xff0c;大会由中国互联网协会主办&#xff0c;聚焦数字基建、开源生态与算力融合等领域。大会开幕式发布“众智FlagOS燎原计划”&#xff0c;正式启动FlagOS开源算力底座共建工作&#xff0c;旨在搭建统一AI算力底层系统&#xf…

作者头像 李华
网站建设 2026/7/10 9:16:03

ngx_http_set_default_types

1 定义 ngx_http_set_default_types 函数 定义在 ./nginx-1.24.0/src/http/ngx_http.cngx_int_t ngx_http_set_default_types(ngx_conf_t *cf, ngx_array_t **types,ngx_str_t *default_type) { ngx_hash_key_t *type;*types ngx_array_create(cf->temp_pool, 1, sizeof(n…

作者头像 李华
网站建设 2026/7/10 9:15:47

一套音响想装进兰博基尼,要先过多少关?

为什么兰博基尼原厂选了森索姆&#xff0c;而不是柏林之声或BOSE&#xff1f;不是谁都能进主机厂的大门自2017年Urus上市起&#xff0c;兰博基尼就提供森索姆音响作为原厂选装配置&#xff0c;在国外车主论坛积累了相当好的口碑。很多奔驰车主第一次听到这个名字是在改装店&…

作者头像 李华
网站建设 2026/7/10 9:12:26

Zoutendijk可行方向法 MATLAB 2024b 实现:3步解析线性约束非线性规划求解

Zoutendijk可行方向法MATLAB 2024b实现&#xff1a;3步解析线性约束非线性规划求解 在工程优化领域&#xff0c;线性约束下的非线性规划问题广泛存在于资源分配、路径规划等实际场景中。Zoutendijk可行方向法作为经典求解方法&#xff0c;其核心思想是通过迭代寻找既满足约束又…

作者头像 李华