当前位置: 首页 > news >正文

Git使用与管理

目录

一、仓库初始化与配置

1. 新建仓库
git init                  # 初始化当前目录为 Git 仓库
2. 配置用户信息
# 局部配置(仅当前仓库生效)
git config user.name "Myname"   #配置仓库用户名
git config user.email "Myemail" #配置仓库邮箱# 全局配置(该服务器下所有本地仓库生效)
git config --global user.name "Myname"
git config --global user.email "Myemail"# 删除配置
git config --unset user.name         # 删除当前仓库用户名
git config --global --unset user.email # 删除全局邮箱
3. 命令别名
git config --global alias.st status   # 用 `git st` 代替 `git status`
git config --global alias.lg 'log --graph --abbrev-commit' # 带参数别名,给命令和参数加上单引号

二、工作区与暂存区

1. 工作区

项目目录中可见的文件系统,即你直接编辑文件的地方,包含实际文件内容(.git 目录除外),所有修改首先在工作区进行,新创建的文件默认处于**未跟踪(untracked)**状态,也就是不能别git跟踪管理

2. 暂存区

版本库中有stage(index),也叫暂存区,索引,充当工作区和版本库之间的缓冲层。

3. 版本库

.git为版本库(本地仓库),git管理追踪文件的修改,存放在版本库中,版本库中包含有暂存区,对象库等。对象库(objects),修改的工作区内容会写入对象库的一个新的git对象中,达到维护版本的目的,每次add都会有一个commit id,HEAD可以记录最近一次提交的commit id,HEAD^表示HEAD的上次提交的commit id,HEAD^^为上上次,以此类推

4. 文件状态管理
git add .                # 添加工作区中所有修改到暂存区
git add file        # 将file文件修改内容加入到暂存区件
git add -f [ignorefile] #强制将已经被忽略的ignorefile文件加入到暂存区
5. 提交更改
git commit -m "Fix login bug"  # 提交暂存区内容并添加描述
6. 查看提交
git log                          # 按照时间排序打印提交内容
git log --pretty=oneline         # 打印到一行
git log --graph --abbrev-commit  # 可视化所有分支的提交
git cat-file -p [commitid]       #查看id为commitid的提交信息git status               # 查看当前仓库状态,查看存在哪些修改
git diff                 # 比较工作区与暂存区差异
git diff [file]          # 比较文件file工作区与暂存区差异
git diff [commitid]      # 比较暂存区与版本库中id为commitid的提交的差异
git diff [commitid] [file] # 比较文件file……

三、版本控制

1. 版本回退
模式效果命令示例
--soft仅回退版本库,回退至上个版本(HEAD^为上个版本的commit id,也可回退至其他版本,下面的命令也相同)(保留暂存区和工作区)git reset --soft HEAD^
--mixed回退版本库和暂存区(保留工作区)git reset --maixed HEAD^
--hard彻底回退所有修改git reset --hard a1b2c3d
git reflog                # 查看操作历史(找回误删的 commit ID)
2. 撤销修改
# 撤销工作区修改(未 add)
git checkout -- filename #将filename文件撤销至上一个add后的版本# 撤销暂存区修改(已 add,未commit)
git reset HEAD filename   # 将暂存区回退至当前(HEAD)版本,之后与第一种情况相同
git checkout -- filename  # 再撤销修改
#或者
git reset --hard HEAD     #将工作区和暂存区回退至当前版本,# 工作区,暂存区,版本库都修改了,已commit
git reset --hard HEAD^     #将工作区和暂存区回退至提交前的版本
# 删除文件
git rm old_file.txt        # 从工作区和暂存区删除
git commit -m "Remove old_file"
3. 文件删除
git  rm [filename]   #在工作区删除,并且自动记录在暂存区,不用在工作区删除在add
git commit -m "delete filename"  #我们之后需要commit提交才可以在版本库中删除

四、分支管理

HEAD指向的分支就是当前的工作分支

1. 基础操作
git branch dev          # 创建 dev 分支,新创建的分支也是指向最近的一次提交 
git checkout dev        # 切换到 dev,将head指针指向dev分支,工作分支切换到dev
git checkout -b feature # 创建并切换到 feature 分支
git branch -d dev       # 删除分支(已合并)
git branch -D hotfix    # 强制删除分支(未合并)
2. 合并与冲突
git merge dev     # 将dev合并到当前工作分支,是Fast-forward(快速合并)模式下的
git merge dev --no-ff -m "Merge dev branch"  # 非快速合并(推荐)

Fast-forward模式下的合并:直接将master(当前工作分支)的指向置位dev最新的提交,该模式无法分辨最新提交是本分支提交还是另外一个分支提交

非forward模式(no-ff模式)合并分支:该模式会产生新的commit提交,并不是直接指向某次提交,因此可以保留所属分支信息所,可以辨认提交属于哪个分支,但是新的commit提交需要带-m选项填写提交信息

当两个分支对同一数据做不同操作时就会产生合并冲突,此时git会将冲突信息写在文件里

冲突代码只能自己进行处理,修复冲突后还需commit操做

冲突解决:手动编辑冲突文件 → git addgit commit

3. 临时保存与bug处理

master主分支上一般提交稳定的经过测试的代码,但是如果出现bug,则需要新开一个分支去处理,既不能影响我们原先正在开发的分支,也不能影响master分支,因此可以先将我们开发代码的分支上的代码进行保存,在去新建分支处理bug

git stash,存储工作区已经被git追踪管理过的文件(新创建的文件没有提交过则不能,)

git stash list,查看存储区都有哪些内容

git stash pop,将存储区内容恢复回来,完成开发后再进行合并提交,但是我们修改过master分支的bug,可能会导致合并时出现新的bug,为了不影响muster分支,我们可以将muster分支合并到我们自己的分支上进行测试修改,没有问题后再合并到muster分支

git stash     # 存储工作区已经被git追踪管理过的文件(新创建的文件没有提交过则不能)
git stash list     # 查看保存的进度
git stash pop      # 恢复最新进度并删除记录

五、 远程仓库

配置,模版文件

1. Issues文件

发现问题的成员与其他成员交流的途径,贴子

2. Pull Request

自己的分支要合并到master分支时,提出的合并申请,该申请由管

员审核,同意后可以合并

3. .gitignore

Git会自动忽略在.gitignore文件中的的文件,使我们在提交时不会提交一些不应该或者不想被提交到远端仓库的文件。

该文件要创建于git工作区的根目录下。

我们自己创建的或者创建远程仓库时配置的都可以生效

我们自己创建.gitignore文件时,可以直接写文件名,也可以写*.endname,可以忽略所有以endname为后缀的文件。

在文件或者* .endname前加!,表示不忽略该文件,或者不忽略*.endname文件(以endname为后缀的文件)

git check-ignore -v [filename],查看filename文件被忽略的原因克隆远程仓库

# 示例 .gitignore 内容
test.c        # 忽略文件test.c
!debug.log    # 不忽略 debug.log
*.log         # 忽略所有 .log 文件
!*.cpp        # 不忽略所有 .cpp 文件
/temp/        # 忽略整个 temp 目录
git check-ignore -v error.log  # 检查忽略文件error.log的规则(原因)

克隆远程仓库

1. HTTPS协议
git clone [https://gitee.com/***/***]  
#克隆该链接下的远端仓库,不能在任意一个本地仓库所在的目录进行克隆
git remote           # 查看远程仓库名称
git remote -v        # 查看详细名称,权限(推送,拉取权限)
2. SSH协议

在我们的服务器上用户主目录下,找.ssh目录,如果有,在该目录下找id_rsa和id_rsa.pub这两个文件(公钥和私钥),如果有, 如果没有则需要创建公钥和私钥。

ssh_keygen -t rsa -C “email”,该命令可以创建公钥和私钥,这里的邮箱地址需要和远端仓库平台配置的邮箱一样

然后将进入id_rsa.pub文件将公钥复制后,配置在远端仓库管理平台,之后进行克隆

远程仓库推送

本地仓库的配置信息user.namehe user.email必须和远端仓库平台配置的一样

git push origin master : master #推送至远程(origin),将本地的master(冒号前的master)#推送至远程的master(如果本地分支和远程分支的名字一样可以省略:master)

远程仓库拉取

当远程仓库的内容由于其他用户的推送导致其内容领先于我们的本地仓库,我们就要进行pull操作来进行更新我们的本地仓库

git pull origin master : master #将远程仓库(origin)的master(冒号前的master)#拉取至本地的master(如果名称相同可以省略)分支并且进行合并

六、标签管理

可以给某次重要的commit提交打上一个标签tag,来标识某些意义,比如1.0版本,2.0版本,打标签相当于给commitid起了一个别名,要进行版本回退或者其他操作时可以使用标签快速操作

1. 添加标签
git tag [name]  # 给当前分支的最新提交打上一个name标签
git tag [name] [commitid]# 给id为commitid的提交打上name标签
git tag -a [name] -m "dite" # 给当前分支的最新提交打上一个name标签,并添加描述dite,#也可以跟上commitid表示给id为commitid的提交打上标签,并且添加标签描述
2. 查看标签
git tag          # 查看所有标签
git show [tag]   # 查看标签tag的详细信息(tag名称,提交信息,标签描述等)
3. 标签推送到远端
git push origin [tag]  # 将tag标签推送到远端
git push origin --tags # 将所有标签推送到远端
4. 删除标签
git tag -d [tag]       # 删除tag标签
git push origin :[tag] # 将远端tag标签删除
http://www.lryc.cn/news/591939.html

相关文章:

  • 时序数据库 Apache IoTDB 实战:基于 Kubernetes 的部署运维全指南
  • 百度权重提升技巧分析:从底层逻辑到实战策略
  • Prompt:开启与AI高效对话的钥匙
  • 客诉:危机到信任的重建
  • Python编程:从入门到实践
  • 前端基础之《Vue(23)—跨域问题》
  • 如何区别HTML和HTML5?
  • 格式转换Total Excel Converter:20 种格式XLS XLSX 批量转 PDFWord
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • 中国工业RFID前三品牌
  • 微型导轨在消费电子领域如何凸显高精度技术?
  • Spring介绍以及IOC和AOP的实现
  • 行为型设计模式:解释器模式
  • 2026python实战——如何利用海外代理ip爬取海外数据
  • ​​Docker 速通教程
  • 【Docker#2】容器历史发展 | 虚拟化实现方式
  • Delphi EDI 需求分析与对接指南
  • Docker 与 GPU 训练
  • 【Docker】在Linux环境下使用Dockerfile打包镜像(图文示例)
  • 深入浅出MyBatis缓存:如何让数据库交互飞起来
  • 无标记点动捕:如何突破传统娱乐边界,打造沉浸式交互体验
  • vscode的终端运行目录修改为当前文件的路径下
  • C#通过HslCommunication连接西门子PLC1200,并防止数据跳动的通用方法
  • 异世界历险之数据结构世界(排序(插入,希尔,堆排))
  • CentOS7下的ElasticSearch部署
  • 2025年6月电子学会全国青少年软件编程等级考试(Python一级)真题及答案
  • TL1A靶点:自免炎症领域的“潜力之星”
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • Elasticsearch 和 solr 的区别
  • Prometheus错误率监控与告警实战:如何自定义规则精准预警服务器异常