当前位置: 首页 > 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.xdnf.cn/news/1141219.html

相关文章:

  • mac mlx大模型框架的安装和使用
  • BIST会对锁步核做什么?
  • 【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历
  • Kubernetes (k8s)、Rancher 和 Podman 的异同点分析
  • Copula 回归与结构方程模型:R 语言构建多变量因果关系网络
  • 异世界历险之数据结构世界(排序(插入,希尔,堆排))
  • mysql 性能优化入门
  • 搜索引擎优化全攻略:提升百度排名优化
  • JAVA 使用Apache POI合并Word文档并保留批注的实现
  • 前端下载文件并按GBK编码解析内容
  • ADVB协议内容分析
  • MyBatis 动态 SQL:让 SQL 语句随条件灵活变化
  • 【科研绘图系列】R语言绘制分组箱线图
  • 【锂电池剩余寿命预测】TCN时间卷积神经网络锂电池剩余寿命预测(Pytorch完整源码和数据)
  • 基于vue框架的房屋租赁系统设计与实现zrd8i(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 信息论至AI实践:交叉熵的原理全景与应用深度解析
  • 【后端】.NET Core API框架搭建(10) --配置163邮件发送服务
  • 数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践
  • 实现库存显示和状态按钮的Question
  • 如何将 iPhone 备份到笔记本电脑?
  • 从 Spring Boot 2.x 到 Spring Boot 3.x:全面对比与快速上手指南
  • 解决“Module ‘./@ant-design/icons‘ does not exist in container”的Webpack微前端报错
  • 【unitrix】 6.8 加一运算(add_one.rs)
  • 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
  • 第16章 基于AB实验的增长实践——验证想法:AB实验实践
  • 【iOS】消息传递和消息转发
  • AI IDE冲击下JetBrains作死,IDEA埋订阅陷阱
  • C++---cout、cerr、clog
  • PYTHON日志神器nb_log详细介绍和使用说明
  • leetcode:单词接龙[图广搜][无权图找最短路径]