Git命令概述

一、Git基础

1、Git简介

定位:分布式版本控制系统(VCS)。

核心概念:数据仓库(Repository):记录文件或目录状态,存储内容修改历史;包括远程数据库(专用服务器,多人共享)和本地数据库(用户本地机器配置,个人使用)。

核心命令:基于本地和远程仓库的代码管理(pull、clone、fetch、push、add、commit等)。

架构图:

2、Git基础概念

三大空间

  1. 工作区(working directory):项目目录内部空间,项目目录下隐藏的.git子目录是暂存区和版本库的存放位置。

  2. 暂存区(staging area/index/cache):Git跟踪和保存文件更改的地方;用户在工作区更改后,通过git add命令将更改复制到暂存区;仅记录执行暂存命令前的更改,后续更改需重新暂存。

  3. 版本库(repository):暂存区更改累积到一定程度后,通过git commit命令提交至版本库持久保存;提交是检查点,记录暂存区与前一次提交的差异;提交后暂存区自动清空。

  4. 关系:working directory →(git add)→ staging area →(git commit)→ repository

本地版本控制基本工作流程

  1. 初始化:在项目目录运行git init命令,生成.git目录结构,完成版本库初始化。

  2. 暂存:git add命令将工作区更改暂存。

  3. 提交:git commit命令将暂存区更改提交到版本库,生成包含状态快照的commit(有commit name和commit id)。

  4. 检出:git checkout命令将版本库中指定commit的状态反映到工作区。

3、Git命令基础

  1. 命令格式git <command> <arguments>

  2. 常用子命令

    1. 启动版本库:init(初始化)、clone(克隆远程仓库)、config(配置)。

    2. 暂存文件变动:add(添加文件到暂存区)、mv(移动或重命名文件)、rm(删除文件)。

    3. 查看状态:status(查看文件状态)、log(查看提交日志)、diff(对比文件变动)、grep(搜索)、show(查看提交详情)。

    4. 分支与合并:checkout(切换分支或检出文件)、branch(管理分支)、merge(合并分支)。

    5. 远程操作:push(推送本地更改到远程仓库)、fetch(抓取远程更改到本地版本库)、pull(拉取并合并远程更改到本地工作区)。

  3. 帮助获取git help <command>git <command> --helpman git-<command>

二、常用Git命令清单

1. 新建代码库

在当前目录新建一个Git代码库

$ git init

新建一个目录,将其初始化为Git代码库

$ git init project-name

下载一个项目和它的整个代码历史

$ git clone url

2. 配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

显示当前的Git配置

$ git config --list

编辑Git配置文件

$ git config -e --global

设置提交代码时的用户信息

$ git config --global user.name "name"

$ git config --global user.email "email address"

3. 增加/删除文件

添加指定文件到暂存区

$ git add file1 file2 ...

添加指定目录到暂存区,包括子目录

$ git add dir

添加当前目录的所有文件到暂存区

$ git add .

添加每个变化前,都会要求确认

对于同一个文件的多处变化,可以实现分次提交

$ git add -p

删除工作区文件,并且将这次删除放入暂存区

$ git rm file1 file2 ...

停止追踪指定文件,但该文件会保留在工作区

$ git rm --cached file

改名文件,并且将这个改名放入暂存区

$ git mv file-original file-renamed

4. 代码提交

提交暂存区到仓库区

$ git commit -m message

提交暂存区的指定文件到仓库区

$ git commit file1 file2 ... -m message

提交工作区自上次commit之后的变化,直接到仓库区

$ git commit -a

提交时显示所有diffrent信息

$ git commit -v

使用一次新的commit,替代上一次提交

如果代码没有任何新变化,则用来改写上一次commit的提交信息

$ git commit --amend -m message

重做上一次commit,并包括指定文件的新变化

$ git commit --amend file1 file2 ...

5. 分支

列出所有本地分支

$ git branch

列出所有远程分支

$ git branch -r

列出所有本地分支和远程分支

$ git branch -a

新建一个分支,但依然停留在当前分支

$ git branch branch-name

新建一个分支,并切换到该分支

$ git checkout -b branch

新建一个分支,指向指定commit

$ git branch branch commit

新建一个分支,与指定的远程分支建立追踪关系

$ git branch --track branch remote-branch

切换到指定分支,并更新工作区

$ git checkout branch-name

切换到上一个分支

$ git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

$ git branch --set-upstream branch remote-branch

合并指定分支到当前分支

$ git merge branch

选择一个commit,合并进当前分支

$ git cherry-pick commit

删除分支

$ git branch -d branch-name

删除远程分支

$ git push origin --delete branch-name

$ git branch -dr remote/branch

6. 标签

列出所有tag

$ git tag

新建一个tag在当前commit

$ git tag tag

新建一个tag在指定commit

$ git tag tag commit

删除本地tag

$ git tag -d tag

删除远程tag

$ git push origin :refs/tags/tagName

查看tag信息

$ git show tag

提交指定tag

$ git push remote tag

提交所有tag

$ git push remote --tags

新建一个分支,指向某个tag

$ git checkout -b branch tag

7. 查看信息

显示有变更的文件

$ git status

显示当前分支的版本历史

$ git log

显示commit历史,以及每次commit发生变更的文件

$ git log --stat

搜索提交历史,根据关键词

$ git log -S keyword

显示某个commit之后的所有变动,每个commit占据一行

$ git log tag HEAD --pretty=format:%s

显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

$ git log tag HEAD --grep feature

显示某个文件的版本历史,包括文件改名

$ git log --follow file

$ git whatchanged file

显示指定文件相关的每一次diff

$ git log -p file

显示过去5次提交

$ git log -5 --pretty --oneline

显示所有提交过的用户,按提交次数排序

$ git shortlog -sn

显示指定文件是什么人在什么时间修改过

$ git blame file

显示暂存区和工作区的差异

$ git diff

显示暂存区和上一个commit的差异

$ git diff --cached file

显示工作区与当前分支最新commit之间的差异

$ git diff HEAD

显示两次提交之间的差异

$ git diff first-branch...second-branch

显示今天你写了多少行代码

$ git diff --shortstat "@{0 day ago}"

显示某次提交的元数据和内容变化

$ git show commit

显示某次提交发生变化的文件

$ git show --name-only commit

显示某次提交时,某个文件的内容

$ git show commit:filename

显示当前分支的最近几次提交

$ git reflog

8. 远程同步

下载远程仓库的所有变动

$ git fetch remote

显示所有远程仓库

$ git remote -v

显示某个远程仓库的信息

$ git remote show remote

增加一个新的远程仓库,并命名

$ git remote add shortname url

取回远程仓库的变化,并与本地分支合并

$ git pull remote branch

上传本地指定分支到远程仓库

$ git push remote branch

强行推送当前分支到远程仓库,即使有冲突

$ git push remote --force

推送所有分支到远程仓库

$ git push remote --all

9. 撤销

恢复暂存区的指定文件到工作区

$ git checkout file

恢复某个commit的指定文件到暂存区和工作区

$ git checkout brachename file

恢复暂存区的所有文件到工作区

$ git checkout .

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

$ git reset file

重置暂存区与工作区,与上一次commit保持一致

$ git reset --hard

重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

$ git reset commit

重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

$ git reset --hard commit

重置当前HEAD为指定commit,但保持暂存区和工作区不变

$ git reset --keep commit

新建一个commit,用来撤销指定commit

后者的所有变化都将被前者抵消,并且应用到当前分支

$ git revert commit

暂时将未提交的变化移除,稍后再移入

$ git stash

$ git stash pop

10. 常用操作组合

修改本地分支名和远程分支名

git branch -m old_branch new_branch # 重命名本地分支

git push origin :old_branch # 删除远程旧分支(分支名前有冒号)

git push --set-upstream origin new_branch # 推送新的分支,并设置本地分支跟踪新的远程分支

三、GitLab相关

1、GitLab简介

定位:Git远程存储库实现,支持代码仓库存储和远程访问;基于Ruby on Rails开发。

附加功能:代码共享、分支合并请求、错误跟踪等。

高层架构:

HTTP/HTTPS (TCP 80,443) ↓↑

SSH (TCP 22) ↓↑

NGINX ←→ GitLab Workhorse ←→ Puma (GitLab Rails) ←→ PostgreSQL

↓↑

GitLab Shell ←→ Gitaly

↓↑

Sidekiq ←→ Redis

↓↑

GitLab Pages

2、GitLab组件介绍

组件 功用
Gitaly 处理GitLab的所有Git调用的Git RPC服务
GitLab Exporter GitLab指标暴露器
GitLab Page 静态Web站点
GitLab self-monitoring组件 Prometheus、Alertmanager、Grafana、Sentry、Jaeger
GitLab Shell 处理基于ssh会话的git命令
GitLab Workhorse 智能反向代理,处理高并发HTTP请求
Inbound emails(SMPT) 接收用于更新issue的邮件
Outbound email (SMTP) 向用户发送邮件通知
LDAP Authentication LDAP认证集成
Mattermost 开源的Slack替代工具
MinIO 对象存储服务
NGINX 路由请求到正确组件,终止SSL会话
Praefect Git客户端和Gitaly存储节点之间的透明代理
Node Exporter 节点指标暴露器
PostgreSQL 数据库(含PostgreSQL Exporter)
Puma (GitLab Rails) 处理Web接口和API请求
Redis 缓存服务(含Redis Exporter)
Registry 容器注册表,支持Image的push和pull
Runner 执行GitLab的CI/CD作业
Sentry integration 跟踪部署应用的错误信息
Sidekiq 后台作业处理器

3、GitLab部署

部署要求: 参考https://docs.gitlab.cn/jh/install/requirements.html

安装方法:

  1. Linux安装包(Omnibus GitLab):包含极狐GitLab和依赖组件(PostgreSQL、Redis、Sidekiq等)。

  2. Helm Chart:在Kubernetes上安装。

  3. Docker:容器化安装。

  4. Source:源码安装(适用于无官方安装包的平台)。

  5. GitLab Environment Toolkit(GET):自动化工具集,用于公有云(Azure、GCP、AWS)部署。

  6. GitLab Operator:Kubernetes Operator风格部署。

前置配置(SMTP服务): 安装postfix服务,编辑/etc/postfix/<main.cf>:

mydestination = $myhostname, magedu.com

mynetworks = 127.0.0.0/8 172.29.0.0/16

inet_interfaces = all

inet_protocols = all

4、GitLab常用配置

外部URL及Nginx端口

external_url 'http://git.magedu.com:80' # 外部URL和监听端口,Nginx自动使用该端口

nginx'listen_port' = 8081 # 反向代理后独立指定Nginx监听端口

sshd配置

gitlab_sshd'enable' = true # 启用内置sshd服务

gitlab_sshd'listen_address' = '0.0.0.0:2222' # sshd监听地址和端口

禁用内置CICD功能

gitlab_rails'gitlab_default_projects_features_builds' = false

仓库存储路径

git_data_dirs({

"default" => {

"path" => "/data/gitlab-data"

}

})

备份配置

gitlab_rails'backup_path' = "/data/gitlab-backups" # 备份文件保存位置

gitlab_rails'backup_keep_time' = 604800 # 备份文件过期时间(秒)

gitlab_rails'backup_upload_connection' = {} # 备份上传至对象存储

  • 备份命令:gitlab-rake gitlab:backup:creategitlab-backup create

  • 恢复命令:gitlab-rake gitlab:backup:restore BACKUP=1685426003_2023_05_30_16.0.1

5、GitLab常用命令

gitlab-ctl子命令

命令 功能 命令 功能
check-config 检查配置文件中过时的配置参数 once 启动停止的服务,再次停止不重启
remove-accounts 删除所有用户和组 start 启动停止的服务,再次停止会重启
upgrade-check 检查版本升级支持 restart 重启服务
upgrade 升级和迁移 stop 停止服务
cleanse 清空数据,重新配置 status 显示所有服务状态
reconfigure 重新配置gitlab tail 监视服务日志
show-config 显示reconfigure生成的配置 service-list 列出所有服务
uninstall 关闭进程并卸载supervisor(保留数据) backup-etc 备份gitlab配置

6、GitLab权限管理

  1. Group用户权限

    1. Guest:可创建issue、发表评论,不能读写版本库。

    2. Reporter:可clone代码,不能commit,适用于QA、PM。

    3. Developer:可clone、commit、push等,适用于RD。

    4. Maintainer:可创建项目、添加tag、保护branch、添加成员、编辑项目,适用于核心RD负责人。

    5. Owner:可设置访问权限、可见级别、迁移项目、管理组成员,适用于开发组leader。

  2. 组和项目的可见性

    1. Private:仅成员可查看。

    2. Internal:除外部用户外,所有登录用户可查看。

    3. Public:无需身份验证即可查看。

7、GitLab仓库设置

  1. 访问权限设置:仓库 → 设置 → 通用 → 项目信息 → 可见性,设置项目可见级别(Private/Internal/Public)。

  2. 分支保护机制:仓库 → 设置 → 仓库 → 受保护的分支,选择分支或创建通配符,配置允许合并、允许推送和合并、允许强制推送的用户/角色。

  3. 合并请求机制:仓库 → 设置 → 合并请求,选择合并方法(合并提交/快进式合并)、合并选项(自动解决差异、显示PR链接、默认删除源分支、合并时压缩提交)。

相关推荐
console.log('npc')14 小时前
修改git中commit内容
git
love8888_cnsd15 小时前
Git & Linux 速查表
java·linux·git·后端·elasticsearch
恋喵大鲤鱼1 天前
git checkout
git·git checkout
知识汲取者1 天前
Git撤销操作全解析:revert、undo与drop commit的区别与应用
git
cxxx171 天前
【同步Overleaf, Github】
git·overleaf
染翰1 天前
Linux root用户安装配置Git
linux·git·后端
老虎海子1 天前
从零手搓一个 AI 编程助手:Mini Claude Code 完全指南
人工智能·git·vscode·python·github
Cat_Rocky1 天前
CICD-Git简单学习 操作流程后续补
git·学习
存在的五月雨1 天前
Git的操作
git