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

使用Git进行版本控制

对代码、文件进行版本控制是协同工作中的一大重点,目前主要有两种版本控制方法,一种是集中式控制,另一种是分布式控制。

  • 集中式控制。在中央服务器中存放着文件,对文件进行修改时,需要从中央服务器中下载最新的文件,修改后再提交到中央服务器中。优点是简单直接,无所大量空间进行存储;缺点是当中央服务器中出现网络问题时,所有客户端都无法进行访问,工作停止!
  • 分布式控制。每个用户的都存放着所有的文件,修改后需要在所有用户之间进行同步。优点是可以随时随地进行本地的工作;缺点是多个用户同时对文件进行修改时,同步文件信息较为麻烦(需要一个类“中央服务器”作为各个用户之间同步的中介)。Git就是一种非常优秀的分布式版本控制器。

目录

  • Git安装
  • Git初始化配置
  • Git创建仓库
    • 本地仓库
    • 远程仓库
  • Git工作区域和文件状态
    • 工作区域
    • 文件状态
    • Git添加和提交文件
    • 回退版本
    • 查看文件差异
    • Git删除文件
    • 忽略文件
  • 远程仓库GitHub
    • 本地仓库和远程仓库关联
  • Git 分支
    • 解决合并冲突
    • rebase

Git安装

Linux Ubuntu中可以使用命令行直接进行安装:sudo apt install git-all
安装后可以查看版本信息:git --verision

Git初始化配置

配置用户名和邮箱:git config --global user.name Wade
git config --global user.email xxx@qq.com
在这里插入图片描述
保存用户名和密码:git config --global crendential.helper store
查看配置信息:git config --global --list

Git创建仓库

在这里插入图片描述
Git有两种工作模式:

  • 本地仓库。用户将仓库建立在本地目录中,使用Git进行管理
  • 远程仓库。仓库建立在远程的服务器中,比较出名的为GitHub、Gitee等。

本地仓库

  1. 在本地合适的空目录下创建一个文件夹:mkdir ~/git/myGitLearning
  2. 在这个目录下创建仓库:cd ~/git/myGitLearning/git init可以将当前文件夹作为Git仓库;或使用git init <name>在当前目录下另新建一个文件夹作为Git仓库
    在这里插入图片描述
  3. 查看当前目录下的文件:ls -a -l
    在这里插入图片描述
    .git目录存放了Git仓库的所有数据,删除.git目录即删除该Git仓库
    在这里插入图片描述

远程仓库

git clone xxx,xxx为远程仓库的地址

Git工作区域和文件状态

工作区域

工作区域分为三个模块:工作区、暂存区以及本地仓库

  • 工作区是我们实际操作的文件目录
  • 暂存区用于临时存放即将提交的修改内容
  • 本地仓库即为git init创建的仓库,是Git存储代码和版本信息的主要位置
    在这里插入图片描述

文件状态

  • 未跟踪:我们新创建还没有被Git管理起来的文件
  • 未修改:已经被Git管理起来,但是文件内容没有改变的文件
  • 已修改:已经修改但是还没有添加到暂存区的文件

空文件夹不会被纳入到版本库中

在这里插入图片描述

Git添加和提交文件

git status查看仓库状态
在这里插入图片描述
创建文件后,仓库的状态发生变化
在这里插入图片描述
git add 添加到暂存区,git ls-files查看暂存区中文件
在这里插入图片描述
git commit 提交暂存区文件到仓库中,会打开COMMIT_EDITMSG添加备注信息
git commit -m [message] [message] 可以是一些备注信息。
git commit [file1] [file2] ... -m [message] 提交暂存区的指定文件到仓库区
在这里插入图片描述
git log查看提交记录,可以使用--oneline来显示简洁的提交信息
在这里插入图片描述

回退版本

git reset用于撤销文件的更新

  • git reset --soft,表示回退到某一个版本,并且保存工作区和暂存区的所有修改内容
  • git reset --hard,表示回退到某一个版本,并且丢弃工作区和暂存区的所有修改内容
  • git reset --mixed,表示回退到某一个版本,并且保存工作区,丢弃暂存区的所有修改内容;为默认参数
    在这里插入图片描述
    使用hard参数需要谨慎,误删之后可以通过下列方式回退:
  1. git reflog,查看操作的历史记录
  2. 找到误删之前的版本号,再使用git reset回退到这个指定的版本

查看文件差异

在这里插入图片描述

  • 默认参数查看工作区、暂存区之间的差异
    在这里插入图片描述
    第一行表示存在差异的文件;第二行是Git将文件内容生成的40位的哈希值,并且只显示前七位,100644是指文件权限;再往下就是修改的内容,红色是删除的内容,绿色是添加的内容

  • git diff HEAD,版本之间的差异,HEAD指向提交的最新版本节点,HEAD~x表示HEAD之前的x个版本

  • git diff --cached,暂存区和版本之间的差异

  • git diff xxx yyy,比较两个特定版本xxx和yyy之间的差异

  • git diff xxx yyy filex,比较两个特定版本xxx和yyy之间文件filex的差异内容

在这里插入图片描述

Git删除文件

  • rm 在工作区删除文件后,git add 更新暂存区
  • git rm 可以直接删除工作区和暂存区同时删除
  • git rm --cached <file>可以只删除版本库中的文件
  • 删除后需要提交到版本库中更新

忽略文件

.gitignore可以忽略一些不必要的文件,让我们的版本库更小

  • 系统自动生成的文件,比如一些工具或者软件产生的临时文件
  • 编译生成的中间文件,可执行文件等等。例如C语言生成.o文件
  • 运行时生成的日志文件、缓存文件、临时文件
  • 带有敏感信息的文件
    在这里插入图片描述

在这里插入图片描述
.gitignore使用前提是该文件不能是已经被添加到版本库中的文件
在这里插入图片描述
在这里插入图片描述

远程仓库GitHub

在这里插入图片描述

创建仓库后进行SSH密钥配置
在Ubuntu中

cd #回到用户根目录下
cd .ssh #进入.ssh文件夹
ssh-keygen -t rsa -b 4096 # -t指定为RSA协议,-b指定生成密钥大小为4096

生成密钥后得到两个文件xxx 和 xxx.pub
打开xxx.pub公钥文件,复制内容添加到到GitHub中SSH key中即可。
非第一次创建SSH密钥还需创建并添加下列五行内容到config文件中,意思是在访问Github时指定使用test这个密钥
在这里插入图片描述
最后git clone git@github.com:xxw016/hello_world.git 得到远程仓库
在这里插入图片描述

本地仓库和远程仓库关联

在这里插入图片描述
这里使用git pull会直接合并远程仓库和本地仓库的分支内容,如果两个仓库的内容存在差异则合并失败;可以使用git fetch命令来只获得远程仓库的修改而不进行合并

Git 分支

在这里插入图片描述

  • git branch 查看当前分支
  • git branch xx 创建新的分支xx
  • git checkout xx 切换到分支xx,这个命令默认为切换分支;但是也可以用来恢复某个被意外修改的文件。因此Git官方提供了新的命令git switch
  • git merge <branch2> 目前所在分支为branch1,并将分支branch2的内容合并到branch1中
  • 使用git log --graph --oneline --decorate --all来图形化显示合并过程
  • 合并后可以用git branch -d branch2来删除分支,如果未合并则可以用-D来强行删除

解决合并冲突

当两个分支对同一个文件进行修改时,合并会出现冲突

  • git merge --abort中断这次合并
  • git diffgit status 查看冲突差异信息,并手动进入目标文件修改合并的信息

rebase

在这里插入图片描述


图片内容参考:B站Up主GeeKHour


http://www.kler.cn/a/355419.html

相关文章:

  • 微信小程序UI自动化测试实践 !
  • 电脑开机提示error loading operating system怎么修复?
  • 基于DockerCompose搭建Redis主从哨兵模式
  • 【ETCD】【源码阅读】深入分析 storeTxnWrite.Put方法源码
  • jvm字节码中方法的结构
  • 使用二分查找法找出给定点距离给定点集合距离最近的点
  • 如何利用RFID技术提升应急物资管理效率?
  • Reactor 与 Proactor 模式概述
  • 动态规划一>下降路径最小和
  • TDengine 与北微传感达成合作,解决传统数据库性能瓶颈
  • JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
  • Dubbo 序列化方式
  • 19.面试算法-树的深度优先遍(一)
  • 飞机大战告尾
  • springboot第76集:线程,ThreadGroup
  • AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms‘
  • 第一百零七周周报
  • Arm官网
  • 安卓冻屏bug案例作业分享-千里马学员wms+input实战作业
  • 浙江省普通话水平测试教程PDF教材电子版(修订版)
  • Android OpenGL天空盒
  • tracert和ping的区别
  • R语言机器学习算法实战系列(八)逻辑回归算法 (logistic regression)
  • 安装和简单使用Milvus
  • protues仿真STM32时,配置管脚为上拉输入时,检测不准确
  • 成都睿明智科技有限公司电商服务可靠不?