Git基础

一、Git安装

# 安装仓库内默认版本
[root@ubuntu2404 ~]#apt update && apt -y install git
[root@ubuntu2404 ~]#git version

# Ubuntu 安装最新版
add-apt-repository ppa:git-core/ppa
apt update
apt list git
apt -y install git

# CentOS系统安装
yum install git -y

二、git命令常见用法

# 查看git及子命令的帮助
git help <子命令> #不加<子命令>是查看git命令的帮助
git <子命令> --help #不加<子命令>是查看git命令的帮助
man git-<子命令>

git version  #查看版本
git init    #本地仓库初始化
git init --initial-branch=main  #初始化主分支为main,默认为master,注意:此为新版用法
git init --bare #创建无工作区的祼仓库,适用于充当远程仓库,一般对应的目录以.git为后缀
git clone <repository_url> [workdir]    #克隆url指定的项目的所有分支和标签对应文件到指定目录(默认为当前目录),并在本地创建此项目的git仓库,默认只显示master分支,而不晃示其它分支,但可以执行git checkout 分支,即可查看到其它分支的文件
git clone -b develop <repository_url>    #克隆url指定的项目,并切换到develop分支
git clone -b tag <repository_url>      #克隆url指定的项目,并切换到指定的tag
git config --global user.name "wangxiaochun" #设置当前用户的git全局用户名,和下面两项都存放在~/.gitconfig文件中
git config --global user.email "29308620@qq.com" #设置全局邮箱
git config --global color.ui true  #让Git显示颜色,会让命令输出看起来更醒目
git config --global core.editor vim #git默认的编辑器为nano,不常用,需要修改为vim
git config --global --list|-l  #列出用户全局设置,默认保存在~/.gitconfig文件中
git config --global -e #交互编辑配置

#文件操作
git add index.html / . #添加指定文件、目录或当前目录下所有数据到暂存区
git mv file_oldname file_newname   #将已经进入版本仓库的文件改名,注意:不支持在工作区没有存入暂存区的新创建的文件
git rm --cached file  #只删除暂存区的文件,不删除工作区文件,相当于git add 反操作,和git restore --staged 功能相同
git rm file      #从删除工作目录和暂存区删除文件
git checkout file    #从暂存区复制文件到工作目录
git restore --staged <file>   #新版EXPERIMENTAL命令,撤销add到暂存区的文件回到工作区,重新成为untracked状态
git restore <file>   #撤消已跟踪但尚未加入暂存区中的文件变更,撤消了工作区中文件的所有新的更改
git restore -s <commitid> <pathspec>  #从某个提交中恢复文件
                  #示例:从前一次提交中恢复README.md文件:git restore -s HEAD~ READEME.md

#查看文件列表和内容
git ls-files      #查看暂存区文件,选项-s显示mode bits, object name and stage number,-o显示untracked文件
git cat-file -p <blogid>  #查看仓库对象的内容,仓库对象存放在.git/objects目录下

#查看文件变化
git diff [<path>...]               #对比工作区和暂存区的区别
git diff --staged|cached [<path>...]      #对比暂存区和本地仓库的前一次提交的区别
git diff --cached <commit> [<path>...]      #对比暂存区与指定的提交
git diff [<commit>] [--] [<path>...]       #对比工作区和指定提交的文件的区别
git diff <commit>...<commit> [--] [<path>...]  #提交和提交之间的文件的区别

#提交
git commit -m “comment“     #提交文件到工作区
git commit -am "comment"     #添加所有修改(不包括新文件)到暂存区并提交,相当于git add + git commit
git commit --amend --no-edit   #重新覆盖上次的提交
git commit --amend -m "comment"  #重新提交,覆盖上次的提交
git show [HEAD]          #查看最近一次提交的详细信息,即查看HEAD当前所指向的commit的信息

#查看日志
git status #查看工作区的状态
git log #查看提交日志
git log --oneline #查看提交日志的简要信息,一个提交一行,只显示commit id的前七位
git log --oneline -N  #查看最近N条commit日志
git log  --pretty=oneline #查看提交日志的简要信息,一个提交一行,显示commit id 全部位
git log  --pretty=raw   #查看提交信息,包括对应的tree对象,父提交,作者等
git log --stats #查看提交的文件的统计信息
git log -p [commit_id] #查看指定提交和之前提交的变化详细信息
git log --author="<author-name-pattern>" #查看指定作者的提交
git log <file-pattern> #查看指定文件的提交
git log origin/main  #查看远程仓库的日志
git reflog  #查看分支或其它引用在本地仓库的完整历史记录

#回滚提交,本质上是将HEAD和master引用移到指定的commit上,是否基于指定的commit连同重置暂存区和工作区则取决于使用的选项

git reset --hard|soft|minxed HEAD^^ #git版本回滚, HEAD为当前版本,加一个^为上一个,^^为上上一个版本,也可以将^换成~
git reset --hard|soft|minxed HEAD~n #回滚前n个版本,0表示当前commit,~或者~1表示前一个commit,即相当于HEAD^
git reset --hard|soft|minxed 5ae4b06 #回退到指定id的版本,使用 git reflog 获取每次提交的ID
git reset --hard|soft|minxed v1.0   #支持tag,此处的v1.0为tag

#分支管理
git branch #查看分支及当前所处的分支
git branch -av #查看所有本地和远程分支
git branch <分支名> #创建分支<分支名>
git branch <分支名> <commit_id> #基于指定提交创建新分支
git branch -d <分支名>  #删除分支
git branch -m dev develop #修改分支名dev为develop
git branch -M main #修改当前分支名称为main
git branch -r    #列出所有远程分支

#切换分支
git checkout <分支名>   #切换到已有的分支,HEAD也会自动指向目标分支上的最新提交
git checkout <tag>   #切换至指定标签,检出到标签,会导致分离头指针,且新创建的提交也将处于分离的状态
git checkout -b <分支名> #创建并切换到一个新分支
git checkout -b <分支名> origin/<分支名> #利用服务器远程仓库的分支,同步在本地创建分支
git checkout [<commit>]-- <file> ...  #找回在工作区删除的已存入暂存区或提交的文件
git merge master -m <message>  #将master分支合并至当前分支,无选项-m, 则为交互式输入信息
git merge orgin/<branch_name>  #将远程分支合并到本地当前分支,通常应该将存在映射关系(通常为同一个分支名称)的分支进行合并
git merge --abort   #取消合并
git switch <branchname>   #切换分支.是Git 2.23 版本引入的新命令,git switch 是一个只专注于分支切换的命令,而 git checkout 则是一个历史更久,有更多的用途。除了切换分支外,gitcheckout 还可以用于还原文件、切换到特定的提交、创建新的分支等更通用的命令
git switch -c <new-branch>    #切抽并创建分支,相当于git branch <new-branch> && git switch <new-branch>


#标签
git tag <tagname>              #当前commit创建轻量标签
git tag <tagname> <commit_id>       #将指定commit创建轻量标签
git tag -a <tagname>  -m <message>     #将当前commit创建附注标签
git tag -a <tagname>  -m <message> <commit_id>  #将指定commit创建附注标签
git tag -d <tagname>           #删除标签
git reset --hard <tagname>        #回滚到指定标签
git tag                 #查看标签
git tag -l [<pattern>]          #查看指定模式的标签
git show <tagname>            #查看指定标签详细信息

#远程仓库
git remote -v #查看远程仓库
git remote show <remote_name> #查看远程仓库详细信息,<remote_name>默认origin
git remote add <remote_name> <url> #创建远程仓库,<remote_name> 默认为origin
git remote add origin git@gitlab.example.com:testgroup/testproject.git #建立远程仓库和本地origin关联
git remote rename origin new-origin  #修改默认远程仓库名称origin为新的名称new-origin
git remote remove|rm origin #删除远程仓库的关联


#和远程仓库推和位
git push #将本地仓库提交代码到远程服务器
git push <remote_name> <branch_name> #推送指定分支到指定的远程仓库
git push origin master #将本地master分支推送到远程的 master 分支,和当前分支是否为master分支无关
git push origin dev   #将本地dev分支推送到远程的dev分支,如果远程没有dev会自动创建,和当前分支是否为dev分支无关
git push -u|--set-upstream origin master #将本地master分支推送到远程仓库master,-u表示以后可用git push 代替此命令
git push origin main:dev #将本地main分支推送至远程dev分支
git push origin :dev #将空分支推送到远程dev,即删除远程dev分支
git push <remote_name> --all #推送本地仓库的的所有有分支到远程
git push -u origin --all   #推送所有分支
git push origin <tagname>    #推送本地仓库指定的tag到远程
git push origin --tag <tagname> #推送本地仓库指定的tag到远程
git push <remote_name> --tags      #将本地仓库所有的tag都推送到远程,默认不会推送标签
git push --delete origin <tagname> #删除远程仓库的标签

git pull        #从远程服务器获取所有分支的代码到本地仓库,并自动合并到本地仓库和工作区
git pull <remote_name> #拉取并合并远程分支变更到当前分支,相当于git fetch <remote_name> 和 git merge <remote_name>
git pull origin dev   #从远程服务器指定的分支dev拉取代码到本地仓库,并自动合并到本地仓库和工作区
git fetch <remote_name> #获取远程仓库所有分支上的变更
git fetch <remote_name>  <branch_name> #获取远程仓库指定分支上的变更,但不合并
git fetch origin master #从远程仓库origin的master分支获取最新版本到本地仓库,但不合并至工作区,需要手动完成合并

#忽略文件,实现不跟踪指定文件
vim .gitignore #定义忽略文件,即不放在仓库的文件

三、Git使用案例

初始化项目

#进入要管理的文件夹
cd /meta-project
#执行初始化命令
git init
#管理目录下的文件状态
vim index.html
git status
#管理指定文件
git add 文件名
git add .
#个人信息配置:用户名和邮箱,只需配置一次即可
git config --global user.name "wangxiaochun" 
git config --global user.email "wang@qq.com"
git config --global color.ui true
#提交
git commit -m "项目开发基本功能v0.0.1"
#查看版本记录
git log
git log --oneline
#记录图形展示
git log --pretty=oneline --graph --all
git log --graph --pretty=format:"%h %s"
git log --graph --pretty=format:'%h -%d %s (%an, %cd)'

开发新功能

git add .
git commit -m '添加AR功能'

版本回退
发现新功能审查有问题,回滚至之前版本

git log        #查看所有的提交记录
git reflog           #查看所有的历史提交记录
git reset --hard <commitID>  #回退到指定的commitID

发布特定版本和紧急修复 bug
创建新分支可以给使用者提供多个不同的分支版本,意味着可以把当前工作从主线版本分离开来,以免影响主线版本的开发。

#查看分支和当前分支
git branch
#创建分支
git branch dev
#切换分支
git checkout dev
vim index.html
git add .
git commit -m '添加新特性'
#删除分支
git branch -d debug
#将指定分支合并至当前分支,可能产生冲突
git merge <要合并的分支>
git merge dev  #将dev的最新代码合并到当前分支

注册和创建的远程软件仓库
首先,需要注册github或gitee等仓库账号,并创建远程仓库,然后再执行如下命令,将代码上传到仓库
注意: 新建仓库时,选择不初始化仓库
将本地仓库同步至远程仓库

#给远程仓库起别名
git remote add origin <远程仓库地址>
#将当前分支的代码推送至远程
git push -u origin 分支
#推送当前已有项目到gitee仓库
git remote add origin https://gitee.com/lbtooth/meta-project.git
git push -u origin "master"

#关联远程仓库
git remote add origin https://gitee.com/lbtooth/meta-project.git
#也可以将用户和密码同时关联
git remote add origin https://<用户名>:<密码>@gitee.com/lbtooth/meta-project.git
#查看关联
git remote
git remote -v
#推送所有分支到远程仓库
git push -u origin --all
#或者只推送dev分支
git checkout dev
git push origin dev

在新电脑初次使用下载远程仓库的代码并继续开发

#克隆远程仓库代码,自动实现实现git remote add origin 远程仓库地址
git clone <远程仓库地址>
#切换分支
git checkout 分支
#在公司下载完代码后,继续开发,切换到dev分支进行开发
git checkout dev
#把master分支合并到dev
git merge master
#修改代码
git add .
#提交代码
git commit -m '继续开发新功能'
git push origin dev

新电脑同步远程仓库到本地

#公有仓库直接下载即可
git clone https://gitee.com/lbtooth/meta-project.git
#如果是私有仓库,还需要提供用户和密码
git clone https://<用户名>:<密码>@gitee.com/lbtooth/meta-project.git
#确认分支
git branch
* master
git checkout -b dev
#拉取dev分支
git pull origin dev
#个人信息配置:用户名和邮箱,只需配置一次即可
git config --global user.email "wang@qq.com"
git config --global user.name "wang" 
git config --global color.ui true
#继续提交
vim index.html
git add .
git commit -m '继续开发新功能'
#同步到远程仓库
git push origin dev

免密码登录

# 通过HTTP/HTTPS实现
#原来的地址:
https://gitee.com/lbtooth/meta-project.git
#修改的地址:
https://用户名:密码@gitee.com/lbtooth/meta-project.git
git remote add origin https://用户名:密码@gitee.com/lbtooth/meta-project.git
git push origin master

SSH 实现
#生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥)
ssh-keygen
#拷贝公钥的内容,并设置到gitee或github中
cat id_rsa.pub
#在git本地中配置ssh地址
git remote add origin git@gitee.com:lbtooth/meta-project.git
#以后使用以下即可
git push origin master

多版本管理:标签管理
虽然每次commit,都会生成一个commit id,但此方式无疑是不方便标记和记忆的
git标签就是对指定的commit的一次快照,相当于给commit ID起了一个容易记忆的名称,可以做为进度的里程碑的标记
git tag 便于后续将特定时期的代码快速取出。

#对当前最新提交的代码创建标签,-a标签名称,-m标签描述
git tag -a "v2.0" -m "新版本2.0"
#创建标签,指定commit ID
git log #查看Commit ID
git tag -a "v1.0" <Commit ID> -m "正式版本1.0"
#查看标签详情
git tag
git tag -l
#同步所有标签到远程仓库
git push origin --tags

Gitlab部署及使用

一、gitlab安装

1、包安装

官方gitlab 包下载链接
https://docs.gitlab.com/install/package/ubuntu/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
https://packages.gitlab.com/gitlab

# 下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/noble/main/g/gitlab-ce/gitlab-ce_18.3.2-ce.0_amd64.deb
# 安装方法1
dpkg -i gitlab-ce_18.3.2-ce.0_amd64.deb
# 安装方法2
apt install ./gitlab-ce_18.3.2-ce.0_amd64.deb
#gitlab相关的目录:
/etc/gitlab #配置文件目录,重要
/var/opt/gitlab #数据目录,源代码就存放在此目录,重要
/var/log/gitlab #日志目录
/run/gitlab #运行目录,存放很多的数据库文件
/opt/gitlab #安装目录

 #gitlab 初始化配置
vim /etc/gitlab/gitlab.rb
grep "^[a-Z]" /etc/gitlab/gitlab.rb

external_url 'http://gitlab.haoge.com' #修改此行

#可选,实现邮件通知设置,增加下面行(可以和上面行写在一起)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "29xxxx@qq.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "29308620@qq.com"
#可选
nginx['listen_port']=8080  #修改nginx代理监听的端口
gitlab_sshd['enable']=true  #是否启用sshd服务
gitlab_sshd['listen_address']='0.0.0.0:2222'
#新版中增加下面行,给root用户指定初始密码才能登录,或者设置环境变量GITLAB_ROOT_PASSWORD实现初
始密码
#注意:密码至少8位并且复杂度要求才是有效密码
gitlab_rails['initial_root_password'] = "Aa123456@@"

#名称解析
[root@ubuntu1804 ~]#vim /etc/hosts
10.0.0.100 gitlab.haoge.com

# 由于 Gitlab 主机功能是代码托管,默认有些额外的组件比较消耗资源,如果暂时不使用可以考虑关闭
#将不需要使用的组件都设定为false

vim /etc/gitlab/gitlab.rb
prometheus['enable'] = false
prometheus['monitor_kubernetes'] =false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_exporter['enable'] = false
prometheus_monitoring['enable'] =false
grafana['enable'] = false

#执行配置reconfigure并启动服务
#每次修改完配置文件都需要执行此操作
gitlab-ctl reconfigure
# 验证 GitLab 启动完成
gitlab-ctl status
#验证端口及状态
lsof -i :80

# Gitlab的常用命令
#客户端命令行操作行
gitlab-ctl 
gitlab-ctl check-config #检查配置
gitlab-ctl show-config  #查看配置
gitlab-ctl reconfigure  #修改过配置后需要执行重新配置
gitlab-ctl stop     #停止gitlab
gitlab-ctl start     #启动gitlab
gitlab-ctl restart    #重启gitlab
gitlab-ctl status    #查看组件运行状态
gitlab-ctl tail     #查看所有日志
gitlab-ctl tail nginx  #查看某个组件的日志
gitlab-ctl service-list #列出服务

#其它命令
gitlab-rails #用于启动控制台进行特殊操作,如修改管理员密码、打开数据库控制台( gitlab-rails dbconsole)等
gitlab-psql #数据库命令行
gitlab-rake #数据备份恢复等数据操作

2、基于 Docker 安装 GitLab

docker pull gitlab/gitlab-ce:17.0.1-ce.0
export GITLAB_HOME=/srv/gitlab

docker run --detach \
 --hostname gitlab.example.com \
 --publish 443:443 --publish 80:80 --publish 22:22 \
 --name gitlab \
 --restart always \
 --volume $GITLAB_HOME/config:/etc/gitlab \
 --volume $GITLAB_HOME/logs:/var/log/gitlab \
 --volume $GITLAB_HOME/data:/var/opt/gitlab \
 --shm-size 256m \
gitlab/gitlab-ce:17.0.1-ce.0
作者:于浩  创建时间:2026-06-11 17:01
最后编辑:于浩  更新时间:2026-07-12 22:32