Git
Git 是一个开源的分布式版本控制系统,被设计用来快速有效地处理从小到大的项目。
1. Git 简介
Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 创建,被设计用来快速有效地处理从小到大的项目。
Git 主要的特点:
- 分布式:每个开发者本地都有完整的版本历史
- 快速高效:大部分操作在本地完成,不需要联网
- 数据完整性:使用 SHA-1 哈希保证数据完整性
- 强大的分支管理:轻量级分支,创建和切换都很快
2. 初始化仓库
2.1 创建新仓库
git init这会在当前目录创建一个新的 Git 仓库。
2.2 克隆现有仓库
git clone [仓库 URL]这会从指定的 URL 克隆一个远程仓库到本地。
2.3 克隆指定分支
git clone -b [分支名] [仓库 URL]3. 添加文件到仓库
3.1 添加单个文件
git add [文件名]将指定文件添加到暂存区。
3.2 添加多个文件
git add [文件1] [文件2] ...3.3 添加所有修改过的文件
git add .. 表示当前目录及子目录下所有修改过的文件。
3.4 取消暂存
git reset [文件名]
# 或
git reset HEAD [文件名]4. 提交更改
4.1 提交暂存区的更改
git commit -m "提交信息"-m 后面跟着的是本次提交的描述信息。
4.2 提交并添加所有修改
git commit -am "提交信息"-a 会自动把所有已经 tracked 的文件暂存起来。
4.3 修改最近一次提交
git commit --amend5. 查看状态和日志
5.1 查看仓库状态
git status查看哪些文件被修改、已经暂存或未跟踪。
5.2 查看提交日志
git log查看提交历史记录。
5.3 查看更详细的提交日志
git log --oneline以更简洁的格式显示提交日志。
5.4 其他常用查看命令
# 查看图形化的分支历史
git log --graph --oneline
# 查看所有分支的所有提交
git log --all
# 查看文件的修改历史
git log -- [文件名]
# 查看文件的具体修改内容
git diff
# 查看已暂存的修改
git diff --cached6. 分支管理
6.1 创建新分支
git branch [分支名]6.2 切换到指定分支
git checkout [分支名]6.3 创建并切换到新分支
git checkout -b [分支名]6.4 查看所有分支
git branch6.5 删除分支
git branch -d [分支名]
# 强制删除(未合并的分支)
git branch -D [分支名]6.6 合并分支
git merge [分支名]将指定分支的更改合并到当前分支。
6.7 变基(rebase)
git rebase [分支名]将当前分支的提交变基到指定分支上,使提交历史更加线性。
7. 远程仓库操作
7.1 添加远程仓库
git remote add [远程仓库名] [仓库 URL]通常远程仓库名默认为 origin。
7.2 查看远程仓库
git remote -v7.3 拉取远程仓库的更新
git pull [远程仓库名] [分支名]git pull 相当于 git fetch + git merge。
7.4 推送到远程仓库
git push [远程仓库名] [分支名]7.5 首次推送
git push -u origin [分支名]-u 会将本地分支与远程分支关联起来。
7.6 删除远程分支
git push origin --delete [分支名]8. 撤销操作
8.1 撤销上一次提交
git reset --hard HEAD~1注意:这会丢失最后一次提交的更改。
8.2 软重置(保留修改)
git reset --soft HEAD~18.3 混合重置(默认)
git reset HEAD~18.4 撤销工作目录中的更改
git checkout -- [文件名]8.5 恢复暂存区的文件到工作区
git restore [文件名]
# git 2.23+ 推荐使用8.6 git checkout 与 git restore 对比
| 功能 | 旧版本 | 新版本 |
|---|---|---|
| 撤销工作区修改 | git checkout -- | git restore |
| 撤销暂存 | git reset HEAD | git restore --staged |
8.7 回退到指定版本
git reset --hard [commit_id]9. 标记(Tag)
9.1 创建标签
git tag [标签名]创建一个轻量级的标签。
9.2 创建带注释的标签
git tag -a [标签名] -m "标签说明"9.3 查看所有标签
git tag9.4 查看标签详情
git show [标签名]9.5 切换到标签
git checkout [标签名]9.6 删除标签
git tag -d [标签名]9.7 推送标签到远程仓库
git push --tags9.8 推送单个标签
git push origin [标签名]10. 储藏(Stash)
当需要临时切换分支但不想提交当前修改时,可以使用 stash。
10.1 储藏当前修改
git stash
# 或者添加描述
git stash save "修改描述"10.2 查看储藏列表
git stash list10.3 恢复储藏
# 恢复最近一次储藏,保留内容
git stash pop
# 恢复指定储藏
git stash pop stash@{0}
# 恢复但不删除储藏
git stash apply10.4 删除储藏
git stash drop stash@{0}
# 清空所有储藏
git stash clear11. .gitignore 文件
.gitignore 文件用于指定哪些文件不需要 Git 管理。
# 注释
# 忽略所有 .log 文件
*.log
# 但 lib.log 例外
!lib.log
# 忽略 node_modules 目录
node_modules/
# 忽略 build 目录
/build11.1 常用规则
#开头表示注释*通配任意多字符?通配单个字符[]包含单个字符的列表!表示不忽略
12. 冲突解决
当合并分支发生冲突时:
- Git 会标记冲突的文件
- 手动编辑冲突文件,决定保留哪些内容
- 冲突标记:
<<<<<<< HEAD
当前分支的代码
=======
要合并分支的代码
>>>>>>> branch-name- 解决完冲突后:
git add .
git commit -m "解决冲突"使用 git mergetool 可以使用图形化工具解决冲突。
13. SSH 公钥配置
13.1 生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"13.2 查看公钥
cat ~/.ssh/id_rsa.pub将公钥内容添加到 GitHub / GitLab 等平台的 SSH 公钥配置中。
13.3 测试连接
ssh -T git@github.com14. Git 常用工作流
14.1 经典 Git Flow
- master 主分支(稳定版本)
- develop 开发分支
- feature/* 功能分支
- release/* 发布分支
- hotfix/* 紧急修复分支
14.2 集中式工作流
类似于 SVN,所有人都工作在 master 分支上。
14.3 功能分支工作流
每个新功能在独立的分支上开发,完成后合并到主分支。
14.4 Forking 工作流
常用于开源项目,每个人 fork 主仓库后在自己的仓库中开发,通过 PR 贡献代码。
15. Git 常用快捷键和别名
可以在 ~/.gitconfig 中配置别名:
[alias]
st = status
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1
l = log --oneline --graph
a = add16. 常见问题
16.1 误删分支
# reflog 可以查看所有历史操作
git reflog
git checkout -b [分支名] [commit_id]16.2 修改最后一次提交
git commit --amend -m "新的提交信息"16.3 找回 reset --hard 之前的提交
git reflog
# 找到对应的 commit_id
git reset --hard [commit_id]16.4 临时保存未提交的修改
git stash
# 处理完其他事情后
git stash pop学习建议: 这些是 Git 的一些基础操作,Git 的功能非常强大,还有许多高级特性等待探索。建议通过官方文档或专业书籍进一步学习。常用的 Git 命令有限,多练习即可熟能生巧。
