Git 常用命令手册

前言

今天整理了一下常用的 Git 操作命令,都是平时经常用到的,基本能覆盖工作中大部分场景。就当记录和总结吧~

Git 工作流

  • Workspace: 工作区
    • 开发程序的文件夹
  • Stage: 暂存区
    • add 之后的修改临时保存在暂存区中
  • Repository: 本地版本库
    • commit 之后的修改临时存在本地版本库中
  • Remote: 远程版本库
    • 远程服务器

Git 常用命令

git config

shell 复制代码
# 设置全局用户
git config --global user.name 'ccc'
git config --global user.email 'xxxxx@example.com'

# 设置局部用户(在指定项目目录下,可配置不同项目有不同的git用户)
git config user.name 'ccc'
git config user.email 'xxxxx@example.com'

# 一次性修改配置
git config --global --edit

# 查看全局配置
cat ~/.gitconfig

git remote

shell 复制代码
# 初始化仓库
git init

# 查看已关联的仓库
git remote -v

# 关联远程仓库
git remote add origin https://github.com/xxxx/xxxx.git

# 删除远程仓库
git remote remove origin

# 直接修改远程仓库
git remote set-url origin https://github.com/xxxx/xxxx.git

# 查看远程仓库的详细信息
git remote show
git remote show origin

git clone

shelll 复制代码
# git clone <远程版本库>
git clone http://github.com/xxx/xxx.git
# git clone <远程版本库> <本地目录名>
git clone http://github.com/xxx/xxx.git <project_name>

git checkout

shell 复制代码
# 切换到本地分支
git checkout <local_branch_name>

# 切换到指定commit_id
git checkout <commit id>

# 从现有分支中新建新的分支,并切换到新分支
git checkout -b <new_branch_name>

# 从远程分支中新建新的分支,并切换到新分支
git checkout -b <new_branch_name> origin/<remote_branch>

# 放弃工作区的修改,只影响工作区
git checkout .
# 放弃工作区和暂存区的修改,影响工作区和暂存区
git checkout -f

git branch

  • 分支操作。
shell 复制代码
# 查看本地所有的分支
git branch
# 查看远程所有分支
git branch -r
# 查看本地和远程所有的分支
git branch -a

# 基于当前分支,新建新的分支,不切换到新分支
git branch <new_branch_name>

# 删除本地分支: 被删除的分支**是**基于当前操作的分支检出的,可用-d,-D
git branch -d <local_branch_name>

# 删除本地分支: 被删除的分支**不是**基于当前操作的分支检出的,只能用-D
git branch -D <local_branch_name>

# 删除远程分支
git push origin --delete <remote branch>

# 修改当前分支名
git branch -m <new name>
  • 比如:dev 分支上检出 feat-dev 分支, test 分支上检出 hotfix-111 分支
  • 当前在 dev 分支上,去删除 feat-dev 分支
  • 可用 git branch -d feat-dev, 也可以用 git branch -D feat-dev
  • 但是删除 hotfix-111 分支,只能用 git branch -D hotfix-111

git status

  • 查看工作区和暂存区的状态。
shell 复制代码
git status

git add

  • 将工作区的修改提交到暂存区。
shell 复制代码
# 将工作区的所有修改提交到暂存区
git add .

# 将指定目录到暂存区,包括子目录,提交到暂存区
git add [dir]

# 将src目录及其子目录下所有*.ts文件,提交到暂存区
git add src/**/*.ts

git commit

  • 将暂存区的修改,提交到本地版本库。
shell 复制代码
# 将暂存区的修改,提交到本地版本库
git commit -m '提交信息'

# 避开钩子函数的检查,强制提交
git commit -m '提交信息' --no-verify
git commit -m '提交信息' -n

# 将暂存区的修改,加到上一次的commit中,进入commit编辑,输入:wq 退出
git commit --amend

# 修改上一次提交的commit信息(未push到远程仓库)
git commit --amend --only -m '新的提交信息'

git push/pull 拉取/提交

shell 复制代码
# 拉取代码,将远程分支同步到本地
git pull

# 推送到远程分支(建立在本地分支追踪远程分支基础上)
git push

// 推送到远程分支,并设置本地分支跟踪的远程分支
git push --set-upstream origin <remote_branch>
git push -u origin <remote_branch>

git merge 分支合并

  • 合并本地某分支。
shell 复制代码
# 把本地某分支合并到该分支
git merge <local_branch>

# 取消合并
git merge --abort

git stash 本地存储

  • 将工作区的改动(未commit),临时存储在本地。
shell 复制代码
# 默认按stash的顺序命名: stash@{n}
git stash

#添加备注
git stash save 'message'

# 查看存储列表
git stash list

# 应用最近一次的stash
git stash apply

# 应用指定的那一条
git stash apply stash@{n}

# 应用最近一次的stash,随后删除该记录
git stash pop

# 删除stash的所有记录
git stash clear

git log 日志过滤

  • log 有很多参数可以帮助我们过滤出想要的内容

常用参数说明:

shell 复制代码
按数量过滤:
    -n: 显示前 n 条记录
    shortlog -n:按作者分类,过滤出前 n 条
按时间过滤:
    --after=: 如 --after='2023-08-30',显示 2023-8-30 之后的提交记录(包含8-30当天)
    --before=: 如:--before='2023-08-30', 显示 2023-8-30 之前的提交记录(不包含8-30当天)
    before/after 是个相对时间,可以这么写:--after='a week ago', --after='yesterday'
按作者过滤:
    --author=: 作者名不需要精确匹配,只需要包含就行了,可使用正则匹配
按commit信息过滤:
    --grep='关键字': 过滤出记录中(commit提交时的注释)与关键字有关的记录
过滤merge commit:
     --no-merges: 过滤出不包含 merge 的记录
     ---merges: 只过滤出包含 merge 的记录


-p:按补丁显示每个更新文件的差异,比下一条 --stat命令信息更全
--stat:统计出每次更新的修改文件列表, 及改动文件中 添加/删除/变动 的行数
--pretty=:使用其他格式显示统计信息,参数有点复杂,目前很少用到。

常用命令:

shell 复制代码
git log

git log --all # 查看所有的提交记录
git log --oneline # 将记录一行一行的形式展示:简洁明了
git log --graph # 记录以图形化的形式展示
git log --stat # 显示每次更新的文件修改统计信息,会列出具体文件列表

git log -10
git shrtlog -10
git log --author='XXX' -10 --no-merges
git log --grep='feat' -10 --no-merges

git reset 代码回滚

  • 让代码回滚到指定的提交版本,并且不保留原来的commit记录。
shell 复制代码
# 仅是撤销commit记录,所有改动都保留(工作区和暂存区)
# HEAD^ 代表上个版本
git reset --soft HEAD^ 
git reset --soft commit_id

# 撤销commit记录,不保留改动,直接回退到指定的提交版本
git reset --hard HEAD^ 
git reset --hard commit_id

# 强推到远程
git push origin dev --force

git revert 代码撤销

  • 撤销指定的提交,并产生一个新的commit,但保留了原来的commit记录。
shell 复制代码
# 撤销指定的提交版本
git revert <commit_id>

# 撤销的版本范围
git revert <commit_id1>..<commit_id2>

# 撤销上一次提交
git revet HEAD

# 撤销上上次提交
git revet HEAD^

git cherry-pick 分支应用

  • 将指定的提交(commit)应用于其他分支。
shell 复制代码
# 将某分支的commit_id提交合并到当前分支
git cherry-pick <commit_id >

# 转移 <commit_id1> 到 <commit_id2> 的所有提交(包含<commit_id1>)
git cherry-pick <commit_id1>^..<commit_id2>

git tag 版本号管理

shell 复制代码
# 列出所有标签
git tag

# 默认在 HEAD 上创建一个标签
git tag v1.0.0

# 指定一个 commit id 创建一个标签
git tag v1.0.0 <commit_id>

# 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a v1.0.0 -m "说明文字"

# 查看单个标签具体信息
git show <tagname>

# 推送指定的本地标签
git push origin <tagname>

# 推送本地未推送的所有标签
git push origin --tags

# 删除本地标签
git tag -d v1.0.0

# 删除一个远程标签
git push origin tag --delete <tagname>

常被忽略的操作

有这样一个场景:

同事说某某分支推送推到远程了,让你帮忙看个问题,你用 git branch -r 本地查看远程分支列表,发现:"咋没看到,是不是还没推送呢?"。这时候别傻不拉几的去问同事,你看不到是因为你没有去同步远程版本库到本地。

shell 复制代码
# 同步:拉取远程版本库的更新,同步到本地
git fetch
git fetch -p

结语

以上是本人常用的 git 操作命令了,基本能覆盖工作的大部分场景,后续有用到新的会及时来补充。

参考链接

git-scm: git-scm.com/docs

相关推荐
神仙别闹3 小时前
基于C#实现的(WinForm)模拟操作系统文件管理系统
java·git·ffmpeg
刘大辉在路上12 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
落落鱼20131 天前
cenos如何升级git到2以上版本
git
Domain-zhuo1 天前
Git常用命令
前端·git·gitee·github·gitea·gitcode
sin22011 天前
git自己模拟多人协作
git
大猫和小黄1 天前
Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
linux·服务器·windows·git
孤水寒月1 天前
Git忽略文件.gitignore
git·elasticsearch
DN金猿2 天前
git命令恢复/还原某个文件、删除远程仓库中的文件
git
DWei_GaGa2 天前
Git:查看分支、创建分支、合并分支
git
涵信2 天前
Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率
linux·git·ubuntu·bash