GIT常用命令

仓库操作

初始化仓库

git init                         # 初始化本地仓库
git clone <url>                  # 克隆远程仓库
git clone --depth=1 <url>        # 浅克隆(只下载最近提交)

远程仓库管理

git remote -v                                # 查看远程仓库
git remote add <name> <url>                  # 添加远程仓库
git remote remove <name>                     # 删除远程仓库
git remote rename <old> <new>                # 重命名远程仓库
git remote set-url <name> <new-url>          # 修改远程仓库URL(重要补充)
git remote set-url origin <新的远程仓库URL>  # 修改origin的URL

使用场景示例

# 查看当前远程仓库
git remote -v
# origin  https://github.com/old/repo.git (fetch)
# origin  https://github.com/old/repo.git (push)

# 修改远程仓库URL
git remote set-url origin https://github.com/new/repo.git

# 验证修改是否成功
git remote -v
# origin  https://github.com/new/repo.git (fetch)
# origin  https://github.com/new/repo.git (push)

文件操作

状态查看

git status                       # 查看工作区状态
git status -s                    # 简洁状态显示

添加文件

git add <file>                   # 添加指定文件
git add .                        # 添加所有文件
git add -A                       # 添加所有变更
git add -p                       # 交互式添加(部分添加)

提交更改

git commit -m "提交信息"          # 提交更改
git commit -am "提交信息"         # 添加并提交(已跟踪文件)
git commit --amend               # 修改最后一次提交

撤销操作

git restore <file>               # 撤销工作区修改(Git 2.23+)
git restore --staged <file>      # 取消暂存
git checkout -- <file>           # 撤销工作区修改(旧版本)
git reset HEAD <file>            # 取消暂存(旧版本)

分支管理

分支操作

git branch                       # 查看本地分支
git branch -a                    # 查看所有分支(包括远程)
git branch <branch-name>         # 创建分支
git checkout <branch-name>       # 切换分支
git checkout -b <branch-name>    # 创建并切换分支
git branch -d <branch-name>      # 删除分支
git branch -D <branch-name>      # 强制删除分支
git branch -m <new-name>         # 重命名当前分支

远程分支

git push origin <branch-name>    # 推送分支到远程
git push -u origin <branch-name> # 推送并设置上游分支
git push origin --delete <branch-name> # 删除远程分支
git fetch origin                 # 获取远程分支信息
git pull origin <branch-name>    # 拉取远程分支

分支合并

  • 这里推荐使用rebase命令(谨慎操作)

  • 为什么建议使用 Rebase 合并

    • 保持历史线性整洁:避免产生大量无意义的合并提交;时间线清晰,便于追踪问题

    • 提升代码审查体验:显示实际修改内容,而非合并冲突;按逻辑顺序呈现提交

    • 方便问题定位:每个提交都基于最新代码;git bisect 等调试工具更有效

  • 重要提醒:谨慎对已推送到公共仓库的提交进行 rebase

rebase流程详解

1、准备阶段:更新目标分支

# 先切换到要合并的目标分支(通常是main)
git checkout main

# 拉取最新的远程代码(避免变基到过时版本)
git pull origin main
# 或者使用:git fetch origin && git merge origin/main

2、切换到待变基分支

# 切换到你的功能分支
git checkout feature-branch

3、关键步骤:备份原分支(强烈建议)

为什么必须备份?

变基会重写提交历史,一旦出现问题可能难以恢复。

常见问题场景:

  • 冲突太多,解决到一半想放弃

  • 变基后发现问题,想回到原始状态

  • 团队协作时,其他人已基于原分支开发

# 备份当前分支到新分支,防止变基失败无法恢复
git checkout -b feature-branch-backup

# 确认备份成功
git branch
# * feature-branch-backup
#   feature-branch
#   main

# 回到原分支
git checkout feature-branch

4、执行变基操作

# 方法1:标准变基(自动处理)
git rebase main

# 如果遇到冲突:
# 1. Git会暂停并显示冲突文件
# 2. 手动解决冲突后:
git add <解决的文件>
git rebase --continue

# 3. 如果想放弃变基:
git rebase --abort

5、交互式变基(高级操作)

# 重新编排最近3个提交
git rebase -i HEAD~3

# 编辑界面会出现类似内容:
# pick a1b2c3d 提交1:添加登录功能
# pick b2c3d4e 提交2:修复样式问题  
# pick c3d4e5f 提交3:添加表单验证

# 可进行的操作(替换pick为):
# r/reword - 修改提交信息
# e/edit   - 修改提交内容
# s/squash - 合并到上一个提交
# f/fixup  - 合并但不保留提交信息
# d/drop   - 删除该提交

工作流示例

# 场景:将feature/login分支变基到main

# 1. 保存当前工作状态(如果有未提交的修改)
git stash

# 2. 备份原分支
git checkout -b feature/login-backup-$(date +%Y%m%d-%H%M)

# 3. 返回原分支
git checkout feature/login

# 4. 更新主分支
git fetch origin
git checkout main
git pull origin main

# 5. 变基操作
git checkout feature/login
git rebase main

# 6. 如果出现冲突,依次解决:
# 查看冲突文件
git status

# 编辑冲突文件,解决冲突后标记为已解决
git add <冲突文件>

# 继续变基
git rebase --continue

# 重复直到所有冲突解决

# 7. 推送变基后的分支(需强制推送)
# 使用--force-with-lease更安全
git push origin feature/login --force-with-lease

# 8. 清理备份分支(确认变基成功后再执行)
git branch -d feature/login-backup-20241215-1430

查看信息

查看提交历史

git log                          # 查看提交历史
git log --oneline                # 简洁形式查看
git log --graph                  # 图形化显示分支
git log --stat                   # 显示文件更改统计
git log -p                       # 显示具体更改内容
git log -n <number>              # 查看最近n条提交
git log --since="2024-01-01"     # 按时间查看

查看差异

git diff                         # 查看工作区与暂存区差异
git diff --staged                # 查看暂存区与仓库差异
git diff <commit1> <commit2>     # 比较两次提交
git diff <branch1>..<branch2>    # 比较两个分支

查看文件

git show <commit>                # 查看提交详情
git show <commit>:<file>         # 查看某次提交的文件
git blame <file>                 # 查看文件修改记录

标签管理

git tag                             # 查看所有标签
git tag <tag-name>                  # 创建轻量标签
git tag -a <tag-name> -m "描述"     # 创建带注释标签
git push origin <tag-name>          # 推送标签到远程
git push origin --tags              # 推送所有标签
git tag -d <tag-name>               # 删除本地标签
git push origin --delete <tag-name> # 删除远程标签

高级操作

储藏更改

git stash                        # 储藏当前更改
git stash save "描述信息"         # 储藏并添加描述
git stash list                   # 查看储藏列表
git stash pop                    # 应用并删除最近储藏
git stash apply                  # 应用储藏但不删除
git stash drop                   # 删除最近储藏
git stash clear                  # 清空所有储藏

重置与回退

git reset --soft HEAD^           # 回退提交但保留更改
git reset --mixed HEAD^          # 回退提交并取消暂存(默认)
git reset --hard HEAD^           # 彻底回退提交
git reset --hard <commit-id>     # 回退到指定提交
git revert <commit-id>           # 撤销某次提交(创建新提交)

子模块

git submodule add <url>          # 添加子模块
git submodule init               # 初始化子模块
git submodule update             # 更新子模块
git submodule foreach <command>  # 对每个子模块执行命令

配置相关

git config --list                # 查看所有配置
git config user.name             # 查看用户名
git config user.email            # 查看用户邮箱
git config --global user.name "姓名"   # 设置全局用户名
git config --global user.email "邮箱"  # 设置全局邮箱
git config --global alias.<简称> "命令" # 设置命令别名

清理与维护

git clean -n                     # 预览将被删除的文件
git clean -f                     # 删除未跟踪的文件
git clean -fd                    # 删除未跟踪的文件和目录
git gc                           # 清理无用数据,优化仓库
git fsck                         # 检查仓库完整性

实用技巧

忽略文件

  • 创建 .gitignore 文件

  • 使用 *.log 等模式匹配忽略特定文件

别名配置

  • 添加到 ~/.gitconfig

  • 配置示例

[alias]
    co = checkout
    br = branch
    ci = commit
    st = status
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
    unstage = reset HEAD --
    last = log -1 HEAD

恢复误删分支

git reflog                                # 查看所有操作记录
git checkout -b <branch-name> <commit-id> # 根据记录恢复分支


GIT常用命令
https://www.ctuhub.top//archives/git-cmds
作者
w-lzh
发布于
2025年12月01日
更新于
2025年12月23日
许可协议