1. 开发者必备:Git/Bash/Vim命令全指南
作为开发者,我们每天都要和Git、Bash、Vim这三个工具打交道。它们就像程序员的瑞士军刀,Git负责版本控制,Bash是命令行操作的利器,Vim则是高效的文本编辑器。掌握它们的常用命令能极大提升工作效率。
我整理了一份自己日常开发中高频使用的命令清单,涵盖了从基础到进阶的各种场景。这些命令都是经过多年实战验证的,特别适合Linux/Mac开发者,Windows用户通过Git Bash也能使用大部分功能。
2. Git命令大全
2.1 基础配置与初始化
首次使用Git需要配置用户信息:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"设置默认编辑器为Vim:
git config --global core.editor "vim"查看当前配置:
git config --list初始化新仓库:
git init克隆现有仓库:
git clone https://github.com/user/repo.git2.2 日常开发流程
查看工作区状态:
git status添加文件到暂存区:
git add filename # 添加单个文件 git add . # 添加所有修改提交更改:
git commit -m "commit message"提示:使用
git commit -v可以查看diff信息后再提交
查看提交历史:
git log git log --oneline --graph --decorate # 简洁版带分支图2.3 分支管理
创建新分支:
git branch new-branch切换分支:
git checkout branch-name git checkout -b new-branch # 创建并切换合并分支:
git merge branch-name删除分支:
git branch -d branch-name # 安全删除 git branch -D branch-name # 强制删除2.4 远程操作
添加远程仓库:
git remote add origin https://github.com/user/repo.git推送本地分支:
git push -u origin branch-name拉取远程更新:
git pull origin branch-name2.5 高级技巧
暂存当前修改:
git stash git stash pop # 恢复撤销工作区修改:
git checkout -- filename修改最后一次提交:
git commit --amend交互式变基:
git rebase -i HEAD~3 # 修改最近3次提交3. Bash命令精华
3.1 文件操作
列出目录内容:
ls -la # 显示隐藏文件切换目录:
cd ~ # 家目录 cd - # 返回上一个目录创建目录:
mkdir -p path/to/dir # 自动创建父目录复制文件:
cp -r source dest # 递归复制目录移动/重命名:
mv oldname newname删除:
rm -rf dirname # 谨慎使用!3.2 文本处理
查看文件内容:
cat filename less filename # 分页查看 head -n 10 filename # 前10行 tail -f filename # 实时查看日志查找内容:
grep "pattern" filename grep -r "pattern" dirname # 递归搜索排序与去重:
sort filename | uniq3.3 系统信息
查看进程:
ps aux | grep process-name磁盘空间:
df -h du -sh * # 查看当前目录各文件大小内存使用:
free -h3.4 网络相关
测试连通性:
ping example.com curl -I example.com # 查看header wget https://example.com/file端口检查:
netstat -tulnp lsof -i :80803.5 实用技巧
命令历史:
history | grep "keyword" !123 # 执行历史中第123条命令后台运行:
nohup command & # 退出终端仍运行定时任务:
crontab -e # 编辑定时任务4. Vim高效编辑
4.1 基本操作
启动Vim:
vim filename模式切换:
- 普通模式:ESC
- 插入模式:i
- 可视模式:v
- 命令行模式::
保存与退出:
:w # 保存 :q # 退出 :wq # 保存并退出 :q! # 强制退出不保存4.2 移动光标
基本移动:
h j k l # 左 下 上 右 w b # 下一个/上一个单词 0 $ # 行首/行尾 gg G # 文件首/尾跳转:
50G # 跳转到第50行 /pattern # 搜索 n N # 下一个/上一个匹配4.3 编辑操作
删除:
x # 删除当前字符 dd # 删除整行 dw # 删除单词复制粘贴:
yy # 复制行 p # 粘贴撤销重做:
u # 撤销 Ctrl+r # 重做4.4 高级功能
多窗口:
:split # 水平分割 :vsplit # 垂直分割 Ctrl+w w # 切换窗口标签页:
:tabnew # 新建标签页 gt gT # 切换标签页宏录制:
qa # 开始录制宏a q # 停止录制 @a # 执行宏a4.5 配置技巧
创建~/.vimrc:
syntax on " 语法高亮 set number " 显示行号 set tabstop=4 " tab宽度 set expandtab " tab转空格 set autoindent " 自动缩进 set hlsearch " 高亮搜索 set ignorecase " 忽略大小写 set cursorline " 高亮当前行5. 组合使用技巧
5.1 Git与Vim结合
设置Git使用Vim作为默认编辑器后,可以在提交信息时使用Vim的强大编辑功能。例如,在写提交信息时:
- 按
i进入插入模式写提交信息 - 按ESC返回普通模式
- 使用
/搜索检查拼写 - 使用
:%s/old/new/g全局替换 :wq保存退出
5.2 Bash脚本中使用Git
自动化部署脚本示例:
#!/bin/bash # 切换到项目目录 cd /path/to/project # 拉取最新代码 git pull origin master # 安装依赖 npm install # 重启服务 pm2 restart app5.3 Vim中执行Bash命令
在Vim中可以直接执行Bash命令:
:!ls -la " 执行ls命令 :r !date " 插入当前日期5.4 实用别名设置
在~/.bashrc中添加:
alias gs='git status' alias ga='git add' alias gc='git commit' alias gl='git log --oneline --graph --decorate' alias gp='git pull' alias gpush='git push' alias vim='vim -p' # 多文件用标签页打开6. 常见问题解决
6.1 Git问题
问题1:fatal: not a git repository (or any of the parent directories): .git
解决方案:
git init # 初始化仓库 或 cd /path/to/git/repo # 切换到正确目录问题2:git pull时出现冲突
解决步骤:
- 查看冲突文件
- 手动解决冲突(用Vim编辑)
- 标记冲突已解决:
git add conflicted-file git commit6.2 Bash问题
问题1:bash: command not found
可能原因:
- 命令不存在
- 未安装相应软件
- PATH环境变量未包含命令路径
解决方案:
which command # 查看命令位置 echo $PATH # 检查PATH问题2:bash: permission denied
解决方案:
chmod +x script.sh # 添加执行权限6.3 Vim问题
问题1:Vim中无法退出
解决方案:
- 确保在普通模式(按ESC)
- 输入
:q!强制退出
问题2:Vim配置不生效
检查步骤:
- 确认~/.vimrc文件存在
- 检查文件权限
- 查看是否有语法错误:
vim -c "so ~/.vimrc"7. 进阶技巧与优化
7.1 Git高级配置
设置命令别名:
git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit git config --global alias.st status彩色输出:
git config --global color.ui true7.2 Bash优化
自定义提示符(PS1):
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '历史命令优化:
export HISTSIZE=10000 export HISTFILESIZE=20000 export HISTTIMEFORMAT="%F %T "7.3 Vim插件管理
使用Vim-plug管理插件:
- 安装Vim-plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim- 在~/.vimrc中添加:
call plug#begin('~/.vim/plugged') Plug 'tpope/vim-fugitive' " Git集成 Plug 'scrooloose/nerdtree' " 文件浏览器 Plug 'vim-airline/vim-airline' " 状态栏 call plug#end()- 在Vim中运行:
:PlugInstall7.4 性能优化
Git大型仓库优化:
git config --global core.preloadindex true git config --global core.fscache true git config --global gc.auto 256Bash启动加速:
# 在~/.bashrc中延迟加载耗时代码 if [ -f ~/.bashrc_heavy ]; then . ~/.bashrc_heavy fiVim启动优化:
" 延迟加载大型插件 autocmd VimEnter * call plug#load('nerdtree')8. 实际工作流示例
8.1 典型Git工作流
- 开始新功能开发:
git checkout -b feature/new-feature- 开发过程中:
git add . git commit -m "实现核心功能"- 同步远程变更:
git fetch origin git rebase origin/main- 推送变更:
git push -u origin feature/new-feature- 创建Pull Request
8.2 代码审查流程
- 查看变更:
git diff HEAD~3 # 查看最近3次提交的变更- 交互式变基:
git rebase -i HEAD~5 # 整理最近5次提交- 修改提交历史后强制推送:
git push -f注意:强制推送只适用于自己的分支,不要在主分支上使用
8.3 紧急修复流程
- 从主分支创建修复分支:
git checkout -b hotfix/urgent-issue main- 修复问题并提交:
git add . git commit -m "修复紧急问题"- 合并回主分支:
git checkout main git merge --no-ff hotfix/urgent-issue git push- 删除临时分支:
git branch -d hotfix/urgent-issue9. 环境配置建议
9.1 Git配置优化
全局.gitignore:
git config --global core.excludesfile ~/.gitignore_global内容示例:
.DS_Store *.log *.tmp node_modules/9.2 Bash环境配置
常用函数:
# 快速进入项目目录 function pj() { cd ~/projects/$1 } # 创建目录并进入 function mkcd() { mkdir -p "$1" && cd "$1" }9.3 Vim开发环境
针对不同语言的配置:
" Python开发 autocmd FileType python setlocal expandtab shiftwidth=4 softtabstop=4 " JavaScript开发 autocmd FileType javascript setlocal expandtab shiftwidth=2 softtabstop=2 " Markdown写作 autocmd FileType markdown setlocal spell9.4 终端多路复用
使用tmux提高效率:
tmux new -s session-name # 新建会话 tmux attach -t session-name # 附加到会话常用快捷键:
- Ctrl+b c: 新建窗口
- Ctrl+b n/p: 切换窗口
- Ctrl+b d: 分离会话
10. 安全注意事项
10.1 Git安全
不要提交敏感信息:
# 检查仓库历史中的敏感信息 git log -p | grep -i "password\|secret\|key"如果发现已提交的敏感信息:
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch path/to/file" \ --prune-empty --tag-name-filter cat -- --all10.2 Bash安全
避免执行不可信脚本:
# 先检查脚本内容 cat script.sh | less设置严格模式:
set -euo pipefail # 脚本开头添加10.3 Vim安全
禁用模型ine执行:
set modelines=0 set nomodeline只加载可信插件:
" 只从官方源安装插件 Plug 'author/plugin', {'rtp': 'path'}11. 跨平台注意事项
11.1 Windows特殊处理
Git Bash配置:
# 解决Windows换行符问题 git config --global core.autocrlf true路径转换:
# 在Git Bash中使用Windows路径 /c/Program\ Files/11.2 MacOS特殊配置
安装最新版工具:
brew install git bash-completion vim解决MacOS特殊键问题:
" 在~/.vimrc中添加 set backspace=indent,eol,start11.3 Linux发行版差异
不同包管理器:
# Debian/Ubuntu sudo apt install git vim bash-completion # CentOS/RHEL sudo yum install git vim bash-completion # Arch sudo pacman -S git vim bash-completion12. 性能监控与调优
12.1 Git性能分析
查看耗时操作:
GIT_TRACE_PERFORMANCE=1 git status优化大仓库:
git gc --aggressive git repack -ad12.2 Bash性能分析
测量命令执行时间:
time command分析脚本性能:
bash -x script.sh # 调试模式12.3 Vim性能调优
识别慢速插件:
:profile start profile.log :profile func * :profile file * " 执行慢速操作 :profile pause :q然后查看profile.log分析瓶颈
13. 备份与迁移
13.1 Git仓库备份
克隆镜像:
git clone --mirror https://example.com/repo.git推送备份:
git push --mirror backup-remote13.2 Bash配置备份
打包配置文件:
tar czvf bash_backup.tar.gz ~/.bashrc ~/.bash_profile ~/.bash_aliases13.3 Vim配置迁移
同步配置:
rsync -avz ~/.vimrc ~/.vim/ user@remote:/path/to/backup/使用版本控制管理配置:
git init ~/.dotfiles cd ~/.dotfiles git add .bashrc .vimrc ... git commit -m "Initial config backup"14. 扩展学习资源
14.1 Git深入学习
- Pro Git电子书:https://git-scm.com/book/
- GitHub学习实验室:https://lab.github.com/
- Git可视化学习:https://learngitbranching.js.org/
14.2 Bash进阶
- Bash手册:
man bash - Bash脚本指南:https://guide.bash.academy/
- ShellCheck在线检查:https://www.shellcheck.net/
14.3 Vim精通
- Vim官方文档:
:help - Vim冒险游戏:https://vim-adventures.com/
- Vim配置示例:https://github.com/amix/vimrc
15. 持续集成中的应用
15.1 Git Hooks
预提交检查:
#!/bin/sh # .git/hooks/pre-commit # 运行测试 npm test if [ $? -ne 0 ]; then echo "测试失败,提交中止" exit 1 fi15.2 Bash自动化脚本
部署脚本示例:
#!/bin/bash set -e echo "开始部署..." git pull npm install npm run build pm2 restart app echo "部署完成"15.3 Vim与CI集成
在CI中使用Vim批处理:
vim -es -c ":%s/old/new/g" -c ":wq" file.txt16. 团队协作规范
16.1 Git工作流选择
- 功能分支工作流
- Git Flow
- GitHub Flow
- GitLab Flow
16.2 提交信息规范
推荐格式:
类型(范围): 简要描述 详细说明 相关issue: #123类型示例:feat, fix, docs, style, refactor, test, chore
16.3 代码审查要点
- 使用
git diff查看变更 - 关注代码风格一致性
- 检查潜在性能问题
- 验证边界条件处理
17. 疑难问题排查
17.1 Git疑难杂症
问题:detected dubious ownership
解决方案:
git config --global --add safe.directory /path/to/repo问题:unable to update local ref
解决方案:
git gc --prune=now git remote prune origin17.2 Bash奇怪行为
问题:脚本在终端可以运行但cron失败
可能原因:
- 环境变量不同
- 相对路径问题
- 权限问题
解决方案:
- 在脚本中设置完整PATH
- 使用绝对路径
- 在cron中重定向输出调试
17.3 Vim异常处理
问题:Vim卡死无响应
解决方案:
- 尝试
Ctrl+c - 如果无效,在另一个终端:
killall -9 vim问题:插件冲突
排查步骤:
- 禁用所有插件
- 逐个启用测试
- 查看
:messages错误信息
18. 个人工作流优化
18.1 快捷键配置
Git别名:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"Bash快捷键:
bind '"\C-p": history-search-backward' bind '"\C-n": history-search-forward'Vim映射:
nnoremap <leader>gs :Gstatus<CR> nnoremap <leader>gc :Gcommit<CR>18.2 终端主题配置
使用Oh My Bash:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"选择主题:
# 在~/.bashrc中 OSH_THEME="agnoster"18.3 开发环境集成
Vim与终端集成:
" 在Vim中打开终端 :terminalGit与IDE集成:
- VS Code Git集成
- IntelliJ Git工具
- Vim fugitive插件
19. 现代化替代方案
19.1 Git增强工具
- lazygit:终端UI
- tig:Git仓库浏览器
- git-town:高级工作流
19.2 Bash替代品
- Zsh:功能更强大
- Fish:用户友好
- PowerShell:跨平台
19.3 Vim现代化
- Neovim:Vim的现代化分支
- VSCode Vim插件:在编辑器中用Vim
- IDE Vim模拟:IntelliJ IdeaVim
20. 实战经验分享
20.1 Git实用技巧
交互式暂存:
git add -p查找引入bug的提交:
git bisect start git bisect bad git bisect good <commit>20.2 Bash高效用法
进程替换:
diff <(curl http://example.com/file1) <(curl http://example.com/file2)并行执行:
for i in {1..10}; do (command $i &) done wait20.3 Vim专业技巧
项目范围搜索:
:vimgrep /pattern/g **/* :copen多文件搜索替换:
:args **/*.js :argdo %s/old/new/g | update21. 工具链整合
21.1 Git与CI/CD集成
Git钩子示例:
#!/bin/sh # .git/hooks/pre-push npm run lint && npm test21.2 Bash自动化部署
使用SSH部署:
ssh user@server "cd /app && git pull && npm install && pm2 restart app"21.3 Vim与调试器集成
使用vim-dadbod连接数据库:
:DB postgresql://user:pass@host:port/dbname :DBSelect * from users;22. 性能对比测试
22.1 Git操作速度优化
不同配置下的git status时间对比:
| 配置项 | 耗时(ms) |
|---|---|
| 默认 | 1200 |
| 启用fsmonitor | 400 |
| 添加.gitignore优化 | 300 |
22.2 Bash脚本性能
不同循环方式速度比较:
# 传统for循环 time for i in {1..1000}; do echo $i >/dev/null; done # 使用内置命令 time printf '%s\n' {1..1000} >/dev/null22.3 Vim启动时间
插件对启动时间的影响:
| 插件数量 | 启动时间(ms) |
|---|---|
| 0 | 50 |
| 10 | 200 |
| 30 | 800 |
优化建议:延迟加载非必要插件
23. 安全最佳实践
23.1 Git安全配置
禁用危险命令:
git config --global receive.denyNonFastForwards true git config --global receive.denyDeletes true23.2 Bash安全脚本
安全脚本编写原则:
- 总是用引号包裹变量
- 使用
set -euo pipefail - 检查输入参数
- 避免使用eval
23.3 Vim安全设置
禁用不安全功能:
set modelines=0 set secure set nomodeline24. 跨平台开发技巧
24.1 处理路径差异
统一路径处理:
# 在脚本中使用相对路径 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)24.2 换行符问题
Git自动转换:
git config --global core.autocrlf input # Linux/Mac git config --global core.autocrlf true # Windows24.3 工具兼容性
检测平台:
case "$(uname -s)" in Linux*) OS=Linux;; Darwin*) OS=Mac;; CYGWIN*) OS=Cygwin;; MINGW*) OS=MinGw;; *) OS="UNKNOWN:${unameOut}" esac25. 个人配置管理
25.1 使用版本控制管理配置
创建dotfiles仓库:
git init --bare $HOME/.dotfiles alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' config config --local status.showUntrackedFiles no25.2 同步配置到新机器
克隆配置:
git clone --bare https://github.com/user/dotfiles.git $HOME/.dotfiles alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' config checkout25.3 配置冲突解决
如果文件已存在:
mkdir -p .config-backup config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .config-backup/{}26. 终端生产力套件
26.1 Tmux集成
Git与Tmux结合:
# 在~/.tmux.conf中 bind-key g run-shell "git status"26.2 终端复用
分屏工作流:
- 左侧:Vim编辑代码
- 右上:运行测试
- 右下:Git操作
26.3 通知集成
Git操作完成通知:
git commit && notify-send "Git" "Commit完成"27. 代码质量保障
27.1 Git预提交检查
使用pre-commit框架:
pip install pre-commit pre-commit install配置.pre-commit-config.yaml:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.2.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer27.2 Bash代码检查
使用ShellCheck:
# 安装 brew install shellcheck # Mac apt install shellcheck # Debian/Ubuntu # 使用 shellcheck script.sh27.3 Vim语法检查
ALE插件配置:
let g:ale_linters = { \ 'javascript': ['eslint'], \ 'python': ['flake8'], \} let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \}28. 文档与知识管理
28.1 Git仓库文档
README规范:
- 项目简介
- 安装说明
- 使用示例
- 开发指南
28.2 Bash脚本文档
脚本头注释:
#!/bin/bash # 脚本名称: deploy.sh # 功能描述: 自动化部署脚本 # 作者: Your Name # 创建日期: 2023-01-01 # 最后修改: 2023-01-1528.3 Vim笔记系统
使用Vimwiki:
Plug 'vimwiki/vimwiki' let g:vimwiki_list = [{'path': '~/vimwiki/', \ 'syntax': 'markdown', \ 'ext': '.md'}]29. 扩展功能探索
29.1 Git扩展命令
自定义Git命令:
#!/bin/sh # git-extra: ~/bin/git-extra case "$1" in cleanup) git gc --aggressive git prune ;; *) echo "Usage: git extra [cleanup]" exit 1 ;; esac29.2 Bash插件系统
使用bash-it:
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it ~/.bash_it/install.sh29.3 Vim IDE化
完整开发环境配置:
" 语言服务器协议 Plug 'neovim/nvim-lspconfig' " 自动补全 Plug 'hrsh7th/nvim-cmp' " 文件浏览 Plug 'preservim/nerdtree' " 状态栏 Plug 'vim-airline/vim-airline'30. 持续学习路径
30.1 Git精通路线
- 基础命令掌握
- 分支管理策略
- 内部原理理解
- 大型仓库优化
- 定制化工作流
30.2 Bash进阶方向
- 脚本调试技巧
- 高级文本处理
- 进程控制
- 信号处理
- 性能优化
30.3 Vim大师之路
- 高效移动技巧
- 宏录制与使用
- 正则表达式精通
- 插件开发
- Neovim Lua配置
掌握这些命令后,我的日常开发效率至少提升了3倍。最初可能需要经常查阅备忘,但坚持使用2-3周后,这些操作就会变成肌肉记忆。建议新手先从最常用的20%命令开始,逐步扩展到其他功能。