Skip to content

git 基本命令

克隆

git clone

克隆仓库时希望本地分支名不同于远程默认的 main/master,可以使用:

sh
git clone -b 远程分支名 --origin 远程名 仓库URL 本地目录名

# 克隆特定分支
git clone -b develop git@github.com:user/repo.git myrepo
cd myrepo
git branch -m develop dev       # 重命名本地分支
git branch -u origin/develop   # 重新关联远程

# 克隆时指定深度(浅克隆)
# 只克隆最近一次提交(节省时间/空间):
git clone --depth 1 https://github.com/user/repo.git # --depth 1 表示只克隆最新版本,不包含完整历史。

# 克隆裸仓库(Bare Repository)
git clone --bare https://github.com/user/repo.git

$ ls
config      description HEAD        hooks       info        objects     packed-refs refs

工作区管理

shell
# 命令用来从工作目录中删除所有没有跟踪(tracked)过的文件
git clean

# 是一次clean的演习, 告诉你哪些文件会被删除
git clean -n

# 删除当前目录下没有tracked过的文件,不会删除.gitignore指定的文件
git clean -f

# 删除当前目录下没有被tracked过的文件和文件夹
git clean -df

# 将没有放入到暂存区的所有文件恢复
git checkout .

#放弃指定文件的修改
git checkout file

# 暂存现在工作区的工作,然后恢复原来为编辑的状态,但是不包括未被跟踪的文件,也就是新建的文件
git stash

# 显示现在正在暂存的工作
git stash list

# 恢复stash暂存区的工作
git stash apply stash@{0}

暂存区管理

shell
# 提交所有修改和新增的文件
git add .
git add -u

# 撤销暂存区的所有文件
git reset HEAD

# 撤销暂存区的指定文件
git reset HEAD file

# 查看暂存区文件列表
git ls-files -s

# 查看暂存区文件内容
git cat-file -p 6e9a94

# 提交一次版本
git commit -m ‘提交信息’

# 提交一次版本, 同git add . && git commit -m "message"
git commit -am ‘提交信息’

# 将误删除文件从上次版本库中恢复
git checkout HEAD -- deletedFile

# 将误删除文件从上上次提交的版本库中恢复
git checkout HEAD^ -- deletedFile

版本库管理

git reset

shell
#使用reset恢复到历史提交点,重置暂存区与工作目录的内容。

# 保留工作区的内容,不保留暂存区 等同 git reset --mixed
git reset

# 保留工作区的内容,把文件差异放进暂存区,即保留暂存区
git reset --soft

# 清空工作区和暂存区的改动
git reset --hard

# 恢复前三个版本
git reset --hard HEAD^^^

# (同上)恢复前三个版本
git reset --hard HEAD~3

# 恢复到指定提交版本(先通过 git log 查看版本号)
git reset --hard b7b73147ca8d6fc20e451d7b36

# 放弃已经add 暂存区的文件hd.js
git reset HEAD hd.js

# 可以查询之前进行的 每一次 git 命令,即包括reset前的所有日志,即显示每一步操作信息
git reflog

分支管理

git branch

shell
#分支用于为项目增加新功能或修复Bug时使用。

# 创建分支
git branch dev

# 查看分支
git branch

# 切换分支
git checkout dev

# 创建并切换分支
git checkout -b feature/bbs

# 查看远程分支
git branch -r

# 将分支 main 更新为master
git branch -m main master

# 合并dev分支到master
git checkout master
git merge dev

# 删除分支
git branch -d dev

# 删除没有合并的分支
git branch -D dev

# 删除远程分支
git push origin :dev

# 查看未合并的分支(切换到master)
git branch --no-merged

# 查看已经合并的分支(切换到master)
git branch --merged

# 查看两个分支的变动
git diff branch-a..branch-b

# 修改现有分支的跟踪关系
git branch -u origin/远程分支名 [本地分支名]
git branch -u origin/feature/dev dev
# 如果当前就在 dev 分支上,可以省略本地分支名:
git checkout dev
git branch -u origin/feature/dev

# 使用 git branch 删除远程分支
git branch -d -r <远程名称>/<分支名>  # 查看远程分支
git push <远程名称> --delete <分支名>  # 实际删除
# 示例
git branch -d -r origin/feature/test  # 先解除关联(可选)
git push origin --delete feature/test # 再删除远程分支

日志查看

git log

shell
#查看日志
git log

# 查看最近2次提交日志并显示文件差异
git log -p -2

# 显示已修改的文件清单
git log --name-only

# 显示新增、修改、删除的文件清单
git log --name-status

# 一行显示并只显示SHA-1的前几个字符
git log --oneline

# 一行显示并只显示SHA-1的前几个字符及最近的5条信息
git log --oneline -5

# 过滤日志信息
git log --oneline --grep="filer info"

# 查看特定时间段日志
git log --before='1 day'
git log --after='1 day'

远程管理

git remote

sh
# 添加远程分支
git remote add origin https://gitee.com/loveagri/blank.git

# 查看远程分支
git branch -r

# 查看远程分支关联地址
# origin  git@gitee.com:loveagri/blank.git (fetch)
# origin  git@gitee.com:loveagri/blank.git (push)
git remote -v

推送分支到远程

git push

sh
# git 
git push -u origin 本地分支名:远程分支名

# 单次命令指定密钥
GIT_SSH_COMMAND="ssh -i ~/.ssh/your_private_key" git push origin main

为不同仓库使用不同密钥,在 ~/.ssh/config 中配置多个 Host

ini
# GitLab 仓库使用密钥 ~/.ssh/gitlab_key
Host gitlab.com
  HostName gitlab.com
  User git
  IdentityFile ~/.ssh/gitlab_key
  IdentitiesOnly yes  # 强制只使用此密钥

# GitHub 仓库使用密钥 ~/.ssh/github_key
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/github_key
  IdentitiesOnly yes

关键点:

  • Host 必须匹配 Git 远程地址的域名(如 git@gitlab.com:user/repo.git 对应 Host gitlab.com)。

  • IdentitiesOnly yes 确保 SSH 不会尝试其他密钥。

sh
# 使用 git push 删除远程分支
git push <远程名称> --delete <分支名>
# 简写
git push <远程名称> :<分支名>

# 示例
git push origin --delete feature/test
# 或
git push origin :feature/test

远程拉取

git pull

sh
#直接拉取远程分支
git pull

git fetch

sh
# 拉取远程分支但是不合并
git fetch

git merge

sh
# 合并远程分支
git merge

git diff

sh
# 查看两个分支的变动
git diff branch-a..branch-b