文章目录
一、本地操作
1. 初始化仓库
git init # 在当前目录创建新仓库
git init <项目目录> # 在指定目录创建
2. 基础文件操作
命令 | 作用 |
---|---|
git add <文件> | 将文件加入暂存区 |
git add . | 添加所有修改的文件 |
git reset <文件> | 从暂存区移除文件(保留工作区修改) |
git rm <文件> | 删除文件并暂存删除操作 |
git mv <旧名> <新名> | 重命名文件并暂存操作 |
3. 提交更改
git commit -m "提交描述" # 提交暂存区的更改
git commit -am "描述" # 跳过git add直接提交已跟踪文件
git commit --amend # 修改最后一次提交(可改描述或内容)
4. 分支管理
命令 | 作用 |
---|---|
git branch | 查看本地分支 |
git branch <分支名> | 创建新分支 |
git checkout <分支名> | 切换分支 |
git switch <分支名> | (Git 2.23+) 更安全的切换方式 |
git merge <分支名> | 合并指定分支到当前分支 |
git branch -d <分支名> | 删除已合并的分支 |
git branch -D <分支名> | 强制删除未合并分支 |
git branch -m <旧分支名> <新分支名> | 重命名分支(不在当前分支) |
git branch -m <新分支名> | 重命名分支(在当前分支) |
5. 查看状态与历史
命令 | 作用 |
---|---|
git status | 查看工作区和暂存区状态 |
git log | 查看提交历史 |
git log --oneline --graph | 简洁版历史(含分支图) |
git diff | 查看未暂存的修改 |
git diff --cached | 查看暂存区的修改 |
git show <提交哈希> | 查看某次提交的详细内容 |
6. 撤销操作
场景 | 命令 |
---|---|
丢弃工作区修改 | git restore <文件> (Git 2.23+) 或 git checkout -- <文件> |
取消暂存的文件 | git restore --staged <文件> 或 git reset <文件> |
回退到某次提交 | git reset --soft <提交> (保留修改) git reset --mixed <提交> (默认,保留工作区) git reset --hard <提交> (彻底丢弃修改) |
恢复误删文件 | git checkout <提交哈希> -- <文件路径> |
7. 临时保存更改(无需提交)
git stash # 保存当前工作区和暂存区
git stash list # 查看保存的临时记录
git stash pop # 恢复最近一次的临时保存
git stash drop # 删除最近一次的临时保存
8. 标签管理(版本标记)
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "版本说明" # 创建含注释的标签
git tag # 查看所有标签
git show v1.0.0 # 查看标签详情
9. 忽略文件配置
在项目根目录创建 .gitignore
文件,例如:
# 忽略所有.log文件
*.log
# 忽略文件夹
node_modules/
.DS_Store
10. 典型工作流示例
场景:开发新功能
git checkout -b feature-xxx # 创建功能分支
# 修改代码...
git add . # 暂存更改
git commit -m "实现xxx功能" # 提交
git checkout main # 切回主分支
git merge feature-xxx # 合并功能分支
git branch -d feature-xxx # 删除已合并分支
场景:修复错误
git stash # 暂存当前未完成的工作
git checkout -b hotfix-bug # 创建修复分支
# 修复代码...
git commit -am "修复XX问题"
git checkout main # 切回主分支
git merge hotfix-bug # 合并修复
git stash pop # 恢复之前的工作
注意事项
- 频繁提交:小颗粒度提交更易管理
- 分支隔离:不同功能/修复使用独立分支
- 慎用
--hard
:git reset --hard
会永久丢弃未提交的修改 - 备份习惯:重要修改前可手动复制项目目录
这些命令已覆盖本地开发的 95% 场景,无需联网即可完成完整的版本控制。
二、远端操作
1. 查看远程仓库信息
git remote -v # 查看所有远程仓库的详细信息(URL)
git remote show origin # 查看特定远程仓库(如origin)的详细信息
2. 添加/删除远程仓库
git remote add <name> <url> # 添加远程仓库(如 git remote add origin https://...)
git remote remove <name> # 删除远程仓库(如 git remote remove origin)
git remote rename <old> <new> # 重命名远程仓库
git remote set-url origin <url> # 修改远端仓库地址
3. 推送代码到远程仓库
git push <remote> <branch> # 推送到指定分支(如 git push origin main)
git push -u origin main # 首次推送并设置上游分支(-u)
git push --set-upstream origin <分支名> # 同上
git push --force # 强制推送(覆盖远程,谨慎使用)
git push --tags # 推送所有本地标签到远程
4. 从远程仓库拉取代码
git pull <remote> <branch> # 拉取并合并(相当于 fetch + merge)
git fetch <remote> # 仅获取远程更新不自动合并
git fetch --prune # 同步删除远程已删除的分支
5. 分支操作
git checkout -b <branch> origin/<branch> # 基于远程分支创建本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地+远程)
git push origin --delete <branch> # 删除远程分支
git branch --set-upstream-to=origin/<分支> [本地分支名] # 为当本地分支创建跟踪信息(设置上游分支)
git branch -u origin/<新远程分支名> [本地分支名] # 同上,可更改现有分支的上游
git branch --unset-upstream [分支名] # 删除上游分支关联
git branch -vv # 查看现有跟踪关系
6. 克隆仓库
git clone <url> # 克隆仓库(默认拉取所有分支)
git clone --branch <branch> <url> # 克隆指定分支
git clone --depth 1 <url> # 浅克隆(只获取最近一次提交)
7. 标签操作
git push origin <tagname> # 推送单个标签
git push origin --tags # 推送所有本地标签
git fetch --tags # 获取远程标签
8. 高级操作
git remote set-url origin <new-url> # 修改远程仓库URL
git push --mirror # 镜像推送(完全同步本地仓库状态)
常见场景示例:
-
首次关联本地仓库到远程:
git remote add origin https://github.com/user/repo.git git push -u origin main
-
同步远程已删除的分支:
git fetch --prune
-
强制覆盖远程分支(谨慎使用):
git push --force origin main
提示:用 git remote -v
可随时查看当前关联的远程仓库地址。
三、同步重命名远程分支
推送新分支 + 删除旧分支
常规操作:
1. 删除远程旧分支
git push origin --delete <旧分支名>
或:
git push origin :<旧分支名> # 冒号前有空格
2. 推送新分支到远程
git push origin <新分支名>
3. 关联本地新分支与远程分支
git branch -u origin/<新分支名>
简化操作(一步完成远程分支重命名):
git push origin <新分支名> # 推送新分支
git push origin --delete <旧分支名> # 删除旧分支
验证结果:
git branch -a # 查看所有分支(确认本地和远程分支名已更新)
常见问题:
-
如果其他人已拉取旧分支:
通知他们运行以下命令同步变更:git fetch --prune # 清理本地缓存的远程分支记录 git checkout <新分支名>
-
重命名默认分支(如
master
→main
):-
需先在远程仓库(GitHub/GitLab)设置中将默认分支改为新名称。
-
本地操作后需更新关联:
git branch -m master main git push -u origin main
-
总结
操作类型 | 命令示例 |
---|---|
本地分支重命名 | git branch -m <旧分支> <新分支> |
远程分支重命名 | git push origin <新分支> + git push origin --delete <旧分支> |
更新关联 | git branch -u origin/<新分支> |
四、全局安全目录
git config --global --add safe.directory /storage/emulated/0/FTP/Linux/.git
这个命令用于将指定目录添加到 Git 的全局安全目录列表中,解决在某些情况下 Git 因安全限制而拒绝访问仓库的问题。
命令分解
git config
: Git 的配置命令--global
: 将配置应用于当前用户的所有仓库(写入用户全局配置)--add
: 添加一个新值到多值配置项(不覆盖现有值)safe.directory
: 安全目录配置项/storage/emulated/0/FTP/Linux/.git
: 要标记为安全的 Git 仓库路径
为什么需要这个配置?
Git 2.35.2+ 版本引入了更严格的安全检查,当检测到以下情况时会拒绝访问:
- 仓库目录所有者与当前用户不同
- 仓库位于潜在不安全的共享位置
常见于:
- Android 设备上的 Termux 环境
- 跨用户共享的仓库
- 外部存储设备上的仓库
- Docker/NFS 挂载的目录
相关操作
1. 查看当前安全目录设置
git config --global --get-all safe.directory
2. 添加多个安全目录
git config --global --add safe.directory /path/to/repo1
git config --global --add safe.directory /path/to/repo2
3. 使用通配符标记所有目录为安全(不推荐)
git config --global --add safe.directory '*'
4. 删除安全目录设置
git config --global --unset-all safe.directory
5. 临时解决方案(单次运行)
git -c safe.directory=/path/to/repo <command>
典型应用场景
在 Android Termux 中访问外部存储的 Git 仓库时:
git config --global --add safe.directory /storage/emulated/0/your-project
这个配置会写入 ~/.gitconfig
文件,内容类似:
[safe]
directory = /storage/emulated/0/FTP/Linux/.git