安装git
1,下载Git
2,Git配置
# git提交代码需要设置名字和邮箱:
git config --global user.name "Your Name" # 设置全局用户名
git config --global user.email "email@example.com" # 设置全局邮箱
# 其他配置
git config --global alias.co checkout # 创建命令别名
git config --global core.autocrlf input # 统一换行符设置(跨平台)
git config --list # 查看所有配置
常用操作
创建操作
# 初始化新仓库
git init # 在当前目录创建新的 Git 仓库
git init <directory> # 在指定目录创建新仓库
# 连接到远程仓库
git remote add origin <url> # 添加远程仓库地址(首次关联)
git remote set-url origin <new-url> # 修改已关联的远程仓库地址
克隆操作
# 克隆完整仓库
git clone <url> # 克隆远程仓库到当前目录
git clone <url> <dirname> # 克隆到指定目录
# 克隆特定分支
git clone -b <branch> <url> # 只克隆指定分支
# 克隆优化选项
git clone --depth 1 <url> # 浅克隆(仅最新提交历史)
git clone --single-branch <url> # 仅克隆默认分支
提交操作
# 基础提交
git add . # 添加所有修改到暂存区
git commit -m "feat: add feature" # 提交暂存区内容
# 跳过暂存区提交(仅限已跟踪文件)
git commit -a -m "fix: update" # 自动添加修改并提交
# 修改提交
git commit --amend # 修改最后一次提交(可改描述/内容)
git commit --amend --no-edit # 修改提交内容但保留原描述
# 部分提交
git add -p # 交互式选择要暂存的代码块
git add filename.txt # 添加指定文件
推送操作
# 基础推送
git push # 推送当前分支到默认远程分支
git push origin main # 推送到指定远程分支
# 强制推送(谨慎使用!)
git push -f origin main # 覆盖远程提交历史
# 删除远程分支
git push origin --delete <branch> # 删除指定的远程分支
# 推送所有分支
git push --all origin # 推送本地所有分支到远程
# 关联并推送
git push -u origin main # 首次推送并设置上游分支
标签操作
# 创建标签
git tag v1.0.0-beta #轻量标签(仅指向某个提交,不存储额外信息)
git tag -a v1.0.0 -m "Release version 1.0.0" #附注标签(包含作者、日期、描述等元数据)
git tag -a v0.9.0 abc1234 -m "Historical release" #为历史提交打标签(指定提交的哈希值)
# 查看标签
git tag #列出所有标签
git show v1.0.0 #查看标签详细信息
git tag -l "v1.*" #按模式搜索标签(例如 v1.x 系列)
# 推送标签到远程仓库
git push origin v1.0.0 #单个推送
git push origin --tags #全部推送
# 删除标签-本地
git tag -d v1.0.0 #删除单个标签(本地)
git tag -l | foreach-object { git tag -d $_ } #删除全部标签(本地)
# 删除标签-远程
git push origin :refs/tags/v1.0.0 #删除单个标签(远程)
git push origin --delete v1.0.0 #删除单个标签(远程)
git push origin --delete $(git tag -l) #删除全部标签(远程)
# 检出标签
git checkout v1.0.0 #切换到标签对应的代码状态(进入“分离头指针”模式)
git checkout -b release-v1.0.0 v1.0.0 #基于标签创建新分支(方便修改或修复)
# 重命名标签 (若需重命名标签,需先删除旧标签,再创建新标签:)
git tag -d old-tag
git tag -a new-tag -m "New tag message"
git push origin :refs/tags/old-tag #删除远程旧标签
git push origin --tags #推送新标签
# 拉取远程标签
git fetch --tags #拉取所有标签
分支操作
# 查看分支
git branch # 查看本地分支
git branch -a # 查看所有分支(含远程)
git branch -v # 查看分支最新提交信息
# 创建/切换分支
git branch dev # 创建新分支
git checkout dev # 切换到分支
git checkout -b feature/login # 创建并立即切换分支
# 删除分支
git branch -d dev # 删除已合并的分支(安全删除)
git branch -D dev # 强制删除未合并的分支
git push origin --delete dev # 删除远程分支
# 分支管理
git branch -m old-name new-name # 重命名分支
git push origin -u dev # 推送分支并建立追踪关系
git checkout --track origin/dev # 跟踪远程分支并创建本地分支
# 清理已合并分支
git branch --merged | grep -v "main" | xargs git branch -d # 删除已合并到main的分支(Bash)
合并操作
# 基础合并
git checkout main # 切换到目标分支
git merge dev # 合并dev分支到当前分支
# 合并控制
git merge --no-ff dev # 强制生成合并提交(禁用快进)
git merge --abort # 终止合并并恢复原状
# 冲突处理
git status # 查看冲突文件
git diff # 查看冲突内容
git mergetool # 使用合并工具解决冲突
git commit -m "Merge dev" # 解决冲突后完成合并
变基操作
# 基础变基
git checkout feature # 切换到要变基的分支
git rebase main # 将当前分支变基到main分支
# 交互式变基
git rebase -i HEAD~3 # 修改最近3个提交(可重排/合并/编辑)
# 冲突处理
git rebase --continue # 解决冲突后继续变基
git rebase --skip # 跳过当前提交(谨慎使用)
git rebase --abort # 终止变基并恢复原状
# 远程分支变基
git pull --rebase origin main # 拉取远程更新并使用变基(替代合并)
# 修改历史提交
git rebase -i HEAD~5 # 编辑过去5个提交(可修改提交信息/内容)
回滚操作
# 撤销本地未提交的修改
git restore <file> # 撤销工作区指定文件的修改(未暂存)
git restore . # 撤销工作区所有未暂存修改
git restore --staged <file> # 撤销暂存区的修改(已add未commit)
# 回退提交
git reset HEAD~1 # 回退到前一次提交(保留工作区修改,默认--mixed)
git reset --soft HEAD~1 # 回退提交但保留修改到暂存区
git reset --hard HEAD~1 # 彻底丢弃最近一次提交和所有修改(慎用!)
# 回退到指定提交
git reset abc1234 # 软回退到指定提交(保留修改)
git reset --hard abc1234 # 硬回退到指定提交(丢弃所有后续修改)
# 撤销已推送的提交
git revert abc1234 # 创建新提交来撤销指定提交(推荐用于远程回滚)
git revert HEAD~3..HEAD # 批量撤销最近3个提交
git push origin main # 推送撤销提交到远程
# 强制覆盖远程仓库(慎用!)
git reset --hard HEAD~2 # 本地回退
git push -f origin main # 强制覆盖远程分支(会丢失远程历史)
# 恢复误删的分支/提交
git reflog # 查看所有操作记录(含已删除的提交)
git checkout -b recovery-branch abc1234 # 根据reflog哈希值恢复
重置操作
# 🔥 危险操作!会永久删除所有提交历史 🔥
# 本地仓库重置(两种方式任选其一)
# --------------------------------
# 方法1:删除.git目录重建(完全清空)
rm -rf .git # 删除本地仓库记录(Unix系统)
git init # 重新初始化仓库
git add . # 添加文件
git commit -m "初始提交" # 创建全新首次提交
# 方法2:使用孤儿分支(保留.git配置)
git checkout --orphan new-root # 创建无父提交的分支
git add . # 添加文件
git commit -m "全新初始提交" # 创建新根提交
git branch -D main # 删除旧分支(原分支名)
git branch -m main # 重命名孤儿分支为main
# 强制覆盖远程仓库
# --------------------------------
# 前提:确保你有远程仓库的强制推送权限
git remote add origin <远程仓库URL> # 如果已关联可跳过
git push -f origin main # 强制覆盖远程分支(删除所有历史)
# 如果远程仓库需要完全重置(可选)
# --------------------------------
# 方法1:删除远程仓库重建(GitHub/GitLab等平台操作)
# 方法2:通过API删除远程仓库所有内容(需平台权限)
# 清理本地缓存(可选)
git gc --aggressive --prune=now # 彻底清理本地残留对象
其他操作
配置相关
git config --global user.name "Your Name" # 设置全局用户名
git config --global user.email "email@example.com" # 设置全局邮箱
git config --global alias.co checkout # 创建命令别名
git config --list # 查看所有配置
git config --global core.autocrlf input # 统一换行符设置(跨平台)
补丁操作
git format-patch HEAD~2 # 生成最近2个提交的补丁文件
git apply patch.diff # 应用补丁(不保留提交信息)
git am *.patch # 应用补丁并保留提交信息
忽略文件配置(.gitignore)
# .gitignore 文件示例
*.log # 忽略所有.log文件
/node_modules/ # 忽略目录
!important.log # 排除特定文件
temp?.txt # 匹配temp1.txt等
贮藏操作(Stash)
# 临时保存未提交的修改
git stash # 贮藏所有已跟踪文件的修改
git stash -u # 贮藏包含未跟踪文件
git stash -m "保存信息" # 添加说明信息的贮藏
# 查看/恢复贮藏内容
git stash list # 列出所有贮藏记录
git stash apply stash@{1} # 恢复指定贮藏(不删除记录)
git stash pop # 恢复最新贮藏并删除记录
git stash drop stash@{0} # 删除指定贮藏记录
# 清除贮藏
git stash clear # 删除所有贮藏记录
差异比较(Diff)
git diff # 工作区与暂存区的差异
git diff --staged # 暂存区与最新提交的差异
git diff HEAD # 工作区与最新提交的差异
git diff commit1 commit2 # 两个提交之间的差异
git diff --word-diff # 单词级差异对比(适合文本)
git diff --stat # 显示简略统计信息
子模块管理(Submodule)
git submodule add <url> <path> # 添加子模块
git submodule init # 初始化子模块(首次克隆后)
git submodule update # 更新子模块到指定提交
git submodule foreach 'git pull' # 对所有子模块执行命令
git clone --recurse-submodules <url> # 克隆包含子模块的仓库
拉取与获取(Fetch/Pull)
git fetch origin # 获取远程更新(不自动合并)
git fetch --prune # 同步删除已不存在的远程分支
git pull origin main # 拉取并合并(等效 fetch + merge)
git pull --rebase origin main # 拉取并使用变基整合
二分查找(Bisect)
git bisect start # 开始二分查找
git bisect bad # 标记当前提交为有问题
git bisect good abc1234 # 标记已知正常的提交
git bisect reset # 结束二分查找
追踪文件修改(Blame)
git blame README.md # 查看文件每行修改记录
git blame -L 10,20 index.html # 查看指定行范围修改历史
git blame -C -C -C file.txt # 检测代码移动来源
钩子(Hooks)
# 示例:添加本地提交前检查(pre-commit)
chmod +x .git/hooks/pre-commit # 创建可执行文件
# 文件内容示例:
#!/bin/sh
npm run lint # 提交前自动执行代码检查
详细教程
Git 是一个分布式版本控制系统,用于跟踪文件的更改,协调多人之间的工作。以下是 Git 的基本用法和一些常见命令的详细说明和示例。
基本用法
用法: git [-v | --version] [-h | --help] [-C <路径>] [-c <名称>=<值>]
[--exec-path[=<路径>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]
[--config-env=<名称>=<环境变量>] <命令> [<参数>]
常见的 Git 命令
创建工作区/仓库
clone:克隆一个仓库到一个新目录
git clone https://github.com/user/repo.git
init:创建一个空的 Git 仓库或重新初始化一个现有的仓库
git init
处理当前变更
add:添加文件内容到索引
git add filename
mv:移动或重命名一个文件、目录或符号链接
git mv old_filename new_filename
restore:恢复工作树文件
git restore filename
rm:从工作树和索引中移除文件
git rm filename
检查历史和状态
bisect:使用二分搜索找到引入 bug 的提交
git bisect start
diff:显示提交之间、提交与工作树之间等的差异
git diff
grep:打印匹配模式的行
git grep "search_pattern"
log:显示提交日志
git log
show:显示各种类型的对象
git show commit_hash
status:显示工作树状态
git status
增长、标记和调整你的公共历史记录
branch:列出、创建或删除分支
git branch git branch new_branch git branch -d old_branch
commit:记录对仓库的更改
#提交 git commit -m "提交备注" #添加并提交 git commit -am "提交备注"
merge:合并两个或多个开发历史
git merge branch_name
rebase:在另一个基点上重新应用提交
git rebase branch_name
reset:重置当前 HEAD 到指定状态
git reset --hard commit_hash
switch:切换分支
git switch branch_name
tag:创建、列出、删除或验证使用 GPG 签名的标签对象
git tag git tag -a v1.0 -m "version 1.0" git tag -d v1.0
协作
fetch:从另一个仓库下载对象和引用
git fetch
pull:从另一个仓库或本地分支获取并整合
git pull origin branch_name
push:更新远程引用及其关联对象
git push origin branch_name
远程仓库使用/remote
连接远程仓库
git remote add 设置库名 远程仓库地址
修改远程仓库的名字
git remote rename 旧库名 新库名
将本地代码推送到远程仓库
git push 库名 分支名
#按提示输入仓库用户名
#输入密码
#giehub => 创建一个登陆令牌 用于密码验证
#SSH鉴权,待补充..略
#快捷推送
#1,
git push -u 库名 分支名
#2,后续推送
git push
分支
初始化创建仓库的时候会默认创建master分支,每次修改都是在master分支上修改
操作分支
#查看当前分支
git log
#或者
git status
#查看全部分支
git branch --list
#创建分支
git branch 新分支名称
#切换分支
git checkout 要切换到的分支名称
#新建一个分支并切换到分支上去
git checkout -b 新分支名
合并分支
#合并分支 当前分支 => 合并的另一个分支
git merge 合并的另一个分支
#查看分支合并状态
git log --all --graph
拉取远程分支
#拉取远程全部分支
git fetch
#切换到拉取下来的分支并跟踪分支
#-常规
git checkout -b 本地分支名 远程库名/远程分支名
#-
git checkout --track 远程库名/远程分支名
#-简写
git checkout 分支名
贮藏
当前分支修改未完毕/未保存 不需要提交 但是需要切换分支时git stash
=git stash push
#当前分支未修改完 未保存修改 且需要切换分支时
git stash
#查看贮藏列表
git stash list
#列表示例 => stash@{}值越小为最近一次贮藏
# stash@{O}: WIP on master: 362fb4e merge feature2
# stash@{1}: WIP on master: 362fb4e merge feature2
# stash@{2}: WIP on master: 362fb4e merge feature2
#恢复贮藏
git stars apply stash@{存储的标记ID}
#慎用=>恢复/找回最近一次贮藏修改的内容
#1 恢复文件为未修改状态 恢复后已修改的内容就还原丢失了
git checkout -- 文件
#2恢复最后一次贮藏修改的数据
git stash pop
#删除指定贮藏
git stash drop stash@{指定ID}
查看配置
查看全局配置
全局配置适用于所有仓库。使用以下命令查看全局配置:
git config --global --list
查看本地配置
本地配置仅适用于当前仓库。使用以下命令查看本地配置:
git config --list
或者:
git config --local --list
查看特定配置项
如果你只想查看某个特定的配置项,比如用户名或邮箱,可以使用以下命令:
查看全局用户名:
git config --global user.name
查看全局用户邮箱:
git config --global user.email
查看本地用户名:
git config user.name
查看本地用户邮箱:
git config user.email
示例输出
例如,运行 git config --global --list
可能会输出以下内容:
user.name=Your Name
user.email=you@example.com
color.ui=auto
core.editor=vim
这些命令将帮助你查看并验证你的 Git 用户配置信息。