问题: 为什么我们需要 Git?
Git 的作用:
小明刚开始写代码,想用 Git 把自己的代码管理起来。
# 在当前文件夹初始化一个 Git 仓库
git init
效果:
.git
隐藏目录。.git
就是 Git 的“大脑”,所有版本信息都存储在里面。举例:
git add
和 git commit
git add
?git add
的作用是把文件放进 暂存区,告诉 Git “我要提交这些文件”。
# 添加一个文件到暂存区
git add filename
# 添加所有文件到暂存区
git add .
小明写了一个 hello.txt
文件,然后运行:
git add hello.txt
效果: hello.txt
被放进了“快递箱”,等待正式提交。
git commit
?git commit
是把暂存区的文件保存到 版本库,生成一个版本快照。
git add
是准备好文件,git commit
是按下“保存快照”的按钮。# 提交代码并附加提交说明
git commit -m "Added hello.txt"
小明提交了代码:
git commit -m "Added a basic hello world example"
效果:
git add
和 git commit
的关系git add
: 告诉 Git 哪些文件需要提交。git commit
: 生成一个版本快照,把这些文件保存起来。举例: git add
是挑选食材,git commit
是把它们做成一顿饭。
小明想把代码传到 GitHub,与队友共享。
git remote add origin https://github.com/your-repo.git
git push -u origin main
队友上传了新功能,你需要更新本地代码。
git pull origin main
小明想尝试一个新功能,但不确定会不会“搞炸”主分支。
git branch new-feature
git checkout new-feature
分支就像平行宇宙,你可以在不同宇宙中实验,互不干扰。
git checkout main
git merge new-feature
小明和小李都修改了 hello.txt
,合并时冲突了。
<<<<<<< HEAD
小明的代码
=======
小李的代码
>>>>>>> new-feature
git add hello.txt
git commit -m "Resolved conflict in hello.txt"
git log
git checkout -- filename
git reset --hard commit-hash
更详细内容见我另一篇教学
git clone https://github.com/your-forked-repo.git
git add .
git commit -m "Added new feature"
git push origin main
.gitignore
在项目根目录创建 .gitignore
文件,写入忽略规则:
*.log
node_modules/
git tag v1.0
git push origin --tags
知识点 | 命令 | 作用 | 备注/记忆方法 |
---|---|---|---|
初始化仓库 | git init |
初始化一个新的 Git 仓库 | 开启 Git 的第一步,创建 .git 文件夹。 |
添加文件 | git add filename |
添加文件到暂存区 | 暂存区是待办清单,添加的文件将在提交时被保存。 |
添加所有文件 | git add . |
添加当前目录下的所有文件到暂存区 | 点号(. )表示“所有文件”。 |
提交代码 | git commit -m "描述信息" |
将暂存区的内容保存到版本库,生成一个快照 | 描述信息要清楚易懂,比如“修复登录功能”。 |
查看状态 | git status |
查看工作区和暂存区的文件状态 | 日常检查命令,用来了解文件是否已添加或提交。 |
查看历史 | git log |
查看提交历史 | 用于追踪代码的提交记录,知道谁改了什么。 |
设置远程仓库 | git remote add origin [远程地址] |
设置远程仓库地址 | 只需执行一次,常用于连接 GitHub。 |
推送代码 | git push -u origin main |
将本地代码上传到远程仓库 | -u 表示将远程分支设置为默认分支,方便后续推送。 |
拉取代码 | git pull origin main |
从远程仓库下载最新代码到本地 | 常用于同步队友的更新。 |
创建分支 | git branch 分支名 |
创建一个新分支 | 用于实现并行开发,比如 git branch feature-login 。 |
切换分支 | git checkout 分支名 |
切换到指定分支 | 切换工作场景到新功能开发或 bug 修复分支。 |
创建并切换分支 | git checkout -b 分支名 |
一步完成创建和切换分支 | 常用操作,推荐记住! |
合并分支 | git merge 分支名 |
将指定分支的内容合并到当前分支 | 常用于将功能分支合并到主分支。 |
解决冲突 | 手动编辑冲突文件 + git add + git commit |
解决合并冲突后提交代码 | Git 会提示冲突位置,手动选择保留内容。 |
查看分支 | git branch |
查看当前分支列表 | 当前分支前会有 * 标记。 |
删除分支 | git branch -d 分支名 |
删除指定分支 | 删除已完成的分支,保持分支清洁。 |
撤销更改 | git checkout -- 文件名 |
恢复文件到上次提交的状态 | 当文件修改错了,可以用这个命令撤销。 |
回滚版本 | git reset --hard 版本号 |
回退到指定版本 | 配合 git log 查找版本号,谨慎使用! |
忽略文件 | .gitignore 文件 |
配置哪些文件不被 Git 跟踪 | 常用于忽略日志、临时文件等,比如 node_modules/ 。 |
打标签 | git tag 标签名 |
给版本打上标记,常用于发布大版本 | 比如 git tag v1.0 。 |
推送标签 | git push origin --tags |
将所有本地标签推送到远程仓库 | 发布版本时的最后一步操作。 |
克隆仓库 | git clone [远程地址] |
从远程仓库复制代码到本地 | 常用于获取现有项目代码。 |
Fork 项目 | GitHub 页面点击 “Fork” | 创建项目副本到自己的账户 | 常用于开源项目贡献。 |
提交 PR | GitHub 上点击 “Pull Request” | 请求原项目合并你的代码 | 贡献开源代码的重要环节。 |
git add
(准备) -> git commit
(保存) -> git push
(上传)。git pull
(拉取)、git merge
(合并)、解决冲突。git branch
(管理分支)、git checkout
(切换分支)。git log
(历史记录)、git status
(状态检查)。用这个表随时回顾常用命令,新手也能迅速掌握 Git!
学会 Git 的核心命令后,你可以:
Git 是你的代码时间机器,用它掌控未来吧!