git基础命令
Git是一个分布式版本控制系统,简单的说其就是一个软件,用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件。
核心功能
- 版本追踪:Git 能够精准记录文件内容的每次变更,为每个版本创建唯一的标识(哈希值),从而实现对项目历史的完整追溯。
- 分支管理:它支持创建多个独立的开发分支,开发人员可以在不同分支上并行开展功能开发或者进行问题修复,之后再将这些分支合并到主分支。
- 分布式协作:项目仓库可以被克隆到本地,开发者在本地进行独立开发,完成后再将修改推送到远程仓库,极大地便利了团队协作。
- 内容完整性:Git 通过 SHA-1 哈希算法确保数据在传输和存储过程中的完整性,有效防止文件被意外修改。
git config --global user.name "用户名"
git config --global user.email "邮箱地址"git config --list # 查看所有配置
git config user.name # 查看特定配置
git checkout .
具体作用阐释
- 撤销未暂存的修改:要是你对某些文件进行了修改,不过还没执行
git add
操作,那么使用这个命令之后,这些修改就会被全部丢弃,文件会回到最后一次提交时的状态。- 不会影响已暂存的文件:要是你已经通过
git add
把修改添加到了暂存区,或者使用git commit
进行了提交,那么这些内容不会受到该命令的影响。- 不会删除新创建的文件:这个命令只会对那些 Git 已经进行跟踪的文件起作用,新创建的文件(也就是未被跟踪的文件)不会被删除。要是你想删除这些未被跟踪的文件,可以搭配使用
git clean
命令。git diff # 对比工作区 vs 暂存区 git diff -- <file> # 只查看指定文件的差异git diff --staged # 对比暂存区 vs 最后一次提交git diff <commit1> <commit2> # 对比两次提交 git diff <commit1> <commit2> -- <file> # 对比两次提交中指定文件的差异 # 例如 git diff HEAD~2 HEAD # 查看当前提交(HEAD)与前两次提交之间的差异。 git diff abc123 def456 # 查看提交 abc123 和 def456 之间的差异。git diff branch1 branch2 # 对比两个分支 git diff branch1..branch2 # 查看两个分支的差异 git diff branch1 branch2 -- path/to/file # 查看特定文件差异 git diff branch1...branch2 # 查看两个分支的共同祖先之后的差异git diff <commit>^ <commit> # 查看某次提交引入的修改 # 例如 git diff abc123^ abc123 # 查看提交 abc123 带来的具体修改内容。
git diff
主要用于对比不同版本之间的文件差异,这些版本可以是工作区、暂存区、本地仓库或者远程仓库中的版本。选项:
--name-only
:只显示有差异的文件名称,不显示具体的修改内容。
--color-words
:以单词为单位显示差异,便于查看细微的修改。
-p
:显示详细的补丁内容,这是默认选项。
--stat
:显示差异的统计信息,例如有多少文件被修改、添加或删除了多少行。
--cached
:与--staged
作用相同,用于查看暂存区与最新提交之间的差异。git diff --name-only git diff --color-words git diff --stat
命令 对比对象 git diff
工作区 vs 暂存区 git diff --staged
暂存区 vs 最新提交 git diff HEAD
工作区 vs 最新提交 git diff branch1 branch2
两个分支的最新提交 git diff commit1 commit2
两次提交之间的差异
$ git version # 查看git的版本信息$ git status # 查看git的状态信息$ git branch # 查看本地分支列表$ git diff # 查看工作区与暂存区之间的差异$ git checkout # 用于切换分支或者恢复工作树文件$ git checkout . # 撤销工作目录里所有已修改但尚未暂存的文件$ git log # 查看提交历史记录$ git help <command> # 可查看具体命令的帮助文档$ 加上 --global 参数的配置会应用到所有仓库$ git push # 把本地仓库的提交推送到远程仓库$ git pull # 从远程仓库拉取最新内容并合并到本地分支
一、仓库基础操作
git init # 在当前目录初始化本地仓库
git clone <url> # 克隆远程仓库到本地
git remote add origin <url> # 添加远程仓库
git fetch # 获取远程仓库更新
git pull # 获取并合并远程更新
git push # 推送本地提交到远程
二、日常开发流程
git status # 查看文件状态
git add <file> # 添加文件到暂存区
git add . # 添加所有修改到暂存区
git commit -m "msg" # 提交暂存区到本地仓库,并附上提交说明
git commit --amend # 修改最后一次提交
git diff # 查看工作区与暂存区差异
git diff --staged # 查看暂存区与最新提交差异
三、分支管理
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支
git branch <name> # 创建新分支
git checkout <name> # 切换分支
git checkout -b <name> # 创建并切换到新分支
git merge <name> # 合并指定分支到当前分支
git branch -d <name> # 删除分支(已合并)
git branch -D <name> # 强制删除分支
四、提交历史
git log # 查看提交历史
git log --oneline # 简洁历史
git log -p <file> # 查看文件修改历史
git blame <file> # 查看文件每行的最后修改者
五、撤销与回滚
git reset <file> # 取消暂存文件
git reset --hard HEAD # 丢弃所有本地修改
git revert <commit> # 撤销指定提交(创建新提交)
git checkout -- <file> # 恢复文件到上次提交状态git reset --hard HEAD~1 # 回退到上一个提交版本
git revert HEAD # 创建一个新提交来撤销上一个提交# git restore——Git 2.23 版本后引入的命令,用于恢复文件或切换分支(替代部分git checkout的功能)。git restore --worktree --staged <file> # 同时恢复工作区和暂存区git restore <file> # 丢弃文件在工作区的修改
git restore . # 丢弃所有未提交的修改git add . # 误添加了某些文件
git restore --staged <file> # 取消暂存,但保留工作区修改git restore --source=HEAD~1 <file> # 恢复文件到上一个提交版本git restore --worktree --staged <file> # 同时恢复工作区和暂存区# 与git checkout的区别
git checkout # 同时支持切换分支和恢复文件,容易混淆功能
git restore # 专门用于文件恢复操作,职责更清晰
六、标签操作
git tag <name> # 创建轻量标签 git tag v1.0.0
git tag -a <name> -m "" # 创建带注释标签 git tag -a v1.0.0 -m ""
git tag # 查看所有标签
git push origin <tag> # 推送标签到远程 git push origin v1.0.0
七、高级技巧
git stash # 保存并隐藏当前修改
git stash pop # 恢复最近一次存储的工作进度(stash),并删除该 stash 记录。
git rebase <branch> # 变基(线性提交历史)
git cherry-pick <commit> # 应用指定提交到当前分支
git bisect # 二分查找定位问题提交git stash list # 查看暂存stash列表
git stash apply # 恢复最近一次存储的工作进度(stash),但保留该 stash 记录。
git stash drop # 删除最近一次暂存stash
git stash clear # 删除所有stash# 变基
git reset --hard HEAD~1 # 回退到上一个提交版本
git revert HEAD # 创建一个新提交来撤销上一个提交
命令 | 是否删除 stash | 常用场景 |
---|---|---|
git stash pop | ✅ 是 | 恢复后不再需要该 stash |
git stash apply | ❌ 否 | 需要多次恢复或保留备份 |
主要功能 | 是否影响提交历史 | 适用场景 | |
---|---|---|---|
git stash pop/apply | 临时保存 / 恢复工作进度 | ❌ 否 | 暂存未完成的修改,不提交到仓库 |
git restore | 恢复文件到指定状态 | ❌ 否 | 丢弃修改、取消暂存、回退文件版本 |
八、配置相关
git config --global user.name "Name" # 设置用户名
git config --global user.email "email" # 设置邮箱
git config --list # 查看配置
git config --global alias.co checkout # 设置别名
九、远程仓库
git remote -v # 查看远程仓库信息
git remote add <name> <url> # 添加远程仓库
git push origin <branch> # 推送分支到远程
git push origin --delete <branch> # 删除远程分支
十、子模块
git submodule add <url> <path> # 添加子模块
git submodule init # 初始化子模块
git submodule update # 更新子模块
十一、常见工作流
1. 集中式工作流
git clone <远程仓库>
# 开发新功能
git checkout -b feature-x
git add .
git commit -m "完成功能x"
git push origin feature-x
# 创建Pull Request并合并到master
2. Git Flow 工作流
git flow feature start x # 创建功能分支
git flow feature finish x # 完成功能分支
git flow release start v1.0 # 创建发布分支
git flow hotfix start bugfix # 创建紧急修复分支
十二、常见错误处理
1. 合并冲突解决
git merge branch-x # 发生冲突
# 手动编辑冲突文件
git add .
git commit # 完成合并
2. 误提交敏感信息
# 1. 删除文件并提交
git rm --cached sensitive.txt
git commit -m "移除敏感文件"# 2. 彻底删除历史记录(谨慎操作)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sensitive.txt' --prune-empty --tag-name-filter cat -- --all
git reset
和 git restore
的功能、用法及区别:
一、核心功能对比
命令 | 主要用途 |
---|---|
git reset | 重置 HEAD 和分支位置,可选择性修改工作区和暂存区(可能丢失数据) |
git restore | 恢复文件到指定状态(如 HEAD 或暂存区),不改变提交历史 |
二、git reset
详解
1. 三种模式
git reset --soft <commit> # 仅移动HEAD,保留暂存区和工作区
git reset --mixed <commit> # 移动HEAD并重置暂存区,保留工作区(默认模式)
git reset --hard <commit> # 移动HEAD、重置暂存区和工作区(**危险:可能丢失未提交数据**)
2. 常用场景
- 撤销最近一次提交,但保留修改
git reset --soft HEAD~1 # 回退到上一个提交,修改保留在暂存区
- 取消暂存文件
git reset <file> # 等价于 git restore --staged <file>
- 彻底丢弃本地修改
git reset --hard HEAD # 丢弃所有未提交的修改(工作区和暂存区)
三、git restore
详解
1. 恢复文件到指定状态
git restore <file> # 丢弃工作区修改(恢复到暂存区状态)
git restore --source=<commit> <file> # 恢复文件到指定提交版本
2. 单独操作暂存区
git restore --staged <file> # 取消暂存(等价于 git reset <file>)
3. 同时恢复工作区和暂存区
git restore --worktree --staged <file> # 从HEAD恢复文件的两个区域
四、命令对比表
操作场景 | git reset 命令 | git restore 命令 |
---|---|---|
取消文件暂存 | git reset <file> | git restore --staged <file> |
丢弃工作区修改 | git reset --hard HEAD <file> | git restore <file> |
恢复文件到历史版本 | git reset --hard <commit> <file> | git restore --source=<commit> <file> |
回退整个分支(危险操作) | git reset --hard <commit> | 不支持(需用 git branch -f ) |
五、关键区别总结
对提交历史的影响
git reset
:可修改提交历史(如回退到旧提交)git restore
:从不修改提交历史,仅操作文件
数据安全性
git reset --hard
:可能永久丢失未提交数据git restore
:更安全,仅恢复到已知状态
设计目标
git reset
:主要用于分支操作(移动 HEAD)git restore
:专门用于文件恢复(拆分自git checkout
)
六、最佳实践建议
1、取消暂存文件
# 推荐使用:
git restore --staged <file> # 语义明确,避免混淆
2、丢弃工作区修改
# 推荐使用:
git restore <file> # 更安全,不涉及提交历史
3、回退分支(谨慎操作)
# 仅在确定需要修改提交历史时使用:
git reset --hard <commit>
七、补充说明
Git 版本兼容性
git restore
是 Git 2.23+ 引入的命令,旧版本需使用git checkout
结合使用示例
# 场景:误提交了敏感信息到本地仓库,但未push
git reset --soft HEAD~1 # 回退提交,保留修改
git restore sensitive.txt # 丢弃敏感文件的修改
git add .
git commit -m "修正:移除敏感信息"