Git 常用命令

1. 新建一个仓库

1.1 新建一个普通仓库

git init

1.2 新建一个裸仓库

git init --bare 

指定新建裸仓库名称:

git init --bare <仓库名>

2. 提交与撤销

2.1 查看状态

git status

2.2 添加文件到暂存区

git add <文件>          # 添加指定文件
git add .               # 添加所有变更
git add -A              # 添加所有变更(包括删除)

2.3 提交

git commit -m "提交信息"

2.4 修改最近一次提交

git commit --amend -m "新提交信息"          # 修改提交信息
git commit --amend --no-edit                # 追加变更到上次提交(不修改信息)

2.5 撤销

git restore <文件>                          # 撤销工作区修改(未暂存)
git restore --staged <文件>                 # 从暂存区移回工作区
git reset --soft HEAD~1                     # 撤销最近一次提交,保留到暂存区
git reset --mixed HEAD~1                    # 撤销最近一次提交,保留到工作区
git reset --hard HEAD~1                     # 彻底撤销最近一次提交(危险!)
git revert <commit-hash>                    # 创建反向提交来撤销(安全,适合已推送的提交)

3. 分支管理

3.1 查看分支

git branch          # 本地分支(当前分支前置 *)
git branch -r       # 远程分支
git branch -a       # 所有分支(本地 + 远程)
git branch -vv      # 查看跟踪关系

3.2 创建与切换分支

git branch <分支名>                         # 创建分支
git switch <分支名>                         # 切换分支(推荐)
git switch -c <分支名>                      # 创建并切换(推荐)
git checkout -b <分支名>                    # 创建并切换(旧式)

3.3 合并分支

git merge <分支名>                          # 合并指定分支到当前分支
git merge --no-ff <分支名>                  # 强制保留分支历史(非快进)
git merge --abort                           # 中止合并(解决冲突时用)

3.4 删除分支

git branch -d <分支名>                      # 删除已合并的本地分支
git branch -D <分支名>                      # 强制删除未合并的本地分支

3.5 重命名分支

git branch -m <新名称>                      # 重命名当前分支
git branch -m <旧名称> <新名称>             # 重命名指定分支

4. 远程仓库

4.1 查看远程仓库

git remote          # 列出远程名称
git remote -v       # 显示远程名称和 URL
git remote show <远程名>                     # 查看远程详细信息

4.2 添加远程仓库

git remote add <远程名> <URL>
# 例如:
git remote add origin git@github.com:user/repo.git

4.3 修改远程仓库地址

git remote set-url <远程名> <新URL>

4.4 删除远程仓库

git remote remove <远程名>

5. 推送与拉取

5.1 推送

git push <远程名> <分支名>                  # 推送到远程
git push -u <远程名> <分支名>               # 推送并设置上游跟踪(下次可直接 git push)
git push --all <远程名>                     # 推送所有本地分支
git push --tags                             # 推送所有标签
git push <远程名> --delete <分支名>         # 删除远程分支
git push --force-with-lease                 # 安全强制推送(比 --force 好)

5.2 拉取

git pull <远程名> <分支名>                  # 拉取并合并(fetch + merge)
git pull --rebase                           # 拉取并用变基代替合并
git fetch <远程名>                          # 仅下载远程内容,不合并
git fetch --all                             # 获取所有远程更新
git fetch --prune                           # 获取并清理已删除的远程分支引用

5.3 克隆远程仓库

git clone <URL>                             # 克隆到本地
git clone --depth 1 <URL>                   # 浅克隆(只取最新提交,省空间)
git clone --branch <分支名> <URL>           # 克隆并切换到指定分支

6. 查看历史

git log                                     # 查看提交历史
git log --oneline                           # 单行简洁模式
git log --graph                             # 图形化分支
git log --oneline --graph --all             # 所有分支的图形历史
git diff                                    # 工作区与暂存区的差异
git diff --staged                           # 暂存区与上次提交的差异

7. 暂存临时修改

git stash                                   # 临时保存工作区修改
git stash pop                               # 恢复最近的 stash 并删除
git stash list                              # 查看所有 stash
git stash apply                             # 恢复最近的 stash 但不删除

8. 标签管理

git tag                                     # 列出所有标签
git tag <标签名>                             # 创建轻量标签
git tag -a <标签名> -m "信息"               # 创建附注标签
git push origin <标签名>                     # 推送指定标签