Git学习

Git是一种分布式版本控制系统,每个用户的电脑都是完整版本库,无需中央服务器。工作流程包括克隆、检出、添加、提交、拉取和推送等。安装Git后需配置用户信息。Git操作包括文件状态管理,如add和commit,以及分支管理和冲突解决。远程仓库通常通过服务如GitHub或Gitee托管,可以进行推送和拉取操作。
摘要由CSDN通过智能技术生成

1.概念

git是分布式版本控制工具,不需要有中央服务器去存储所有的代码,但是git有一个中心服务器,但他不像集中式版本控制一样将所有的代码都存储到服务器中,git的中心服务器可以被看作为一个普通的pc用户端,它不工作了照样可以进行版本控制和代码交换,只是会变得不方便

2.集中式版本控制和分布式版本控制

集中式版本控制是通过一个中央服务器去存储所有的版本(版本库)

所有开发者想要开发时,必须先从这个中央服务器拉取代码才能够工作,而且中央服务器和开发者之间是通过互联网进行连接的,每一个开发者修改完毕后再将修改后的代码提交到中央服务器中

分布式版本控制中没有中央服务器,每一个人的电脑都是一个完整的版本库,这样在工作的时候就无需联网了,因为版本库就在自己的电脑上,多人协作只需要将自己的修改发送给对方,就可以互相看到对方的修改了

3.git工作流程

命令如下:

1.clone(克隆):从远程仓库克隆代码到本地仓库

2.checkout(检出):从本地仓库检出一个分支进行修订

3.add(添加):在提交前将代码放入暂存区

4.commit(提交):提交到本地仓库,本地仓库中保存修改的各个历史版本

5.fetch(抓取):从远程仓库,抓取到本地仓库,不进行任何的合并操作,一般操作比较少

6.pull(拉取):从远程仓库,拉取到本地仓库,自动进行分支合并(merge)然后放到工作区,相当于fetch+merge

7.push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

4.安装git

1)安装

下载网址 Git - Downloads (git-scm.com)

安装成功,右键能看到两个选项

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具

安装完git之后,首先要配置自己的用户名和邮箱,因为每一次git提交都会使用该用户的信息

2)基本配置

1.打开Git Bash

2.设置用户信息

git config --global user.name "zzzxxxxxlll"

git config --global user.email "1650030420@qq.com" //邮箱不要求是必须存在的

查看用户信息

git config --global user.name

git config --global user.email

3)为常用指令配置别名

有些常用指令参数非常多,每次都要输入好多参数,为此可以使用别名

1.打开用户目录,创建.bashrc文件

部分window系统中不允许创建以.开头的文件,可以打开gitBash,执行touch ~/.bashrc

注:这里说的用户目录一般指C盘下的'用户'文件夹

2.在文件中输入内容

#用于输出git提交日志
alias git-log='git log ==pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录下所有文件及其基本信息
alias ll='ls -al'

5.获取本地仓库

1)在电脑上创建一个文件夹,作为本地仓库

2)进入到这个文件夹中打开gitbash

3)输入git init 将这个文件夹变为本地仓库

4)如果创建成功了该文件夹下会出现.git文件夹

6.基础操作指令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行git的命令而发生变化

只要是工作区的文件变化了,就需要将其提交到暂存区使其可以被追踪

1.git add (工作区 -> 缓存区)

2.git commit (暂存区 -> 本地仓库)

查看修改的状态(暂存区对比工作区)

git status

从工作区添加任务到暂存区

git add [filename] 提交某一个文件

git add . 提交所有未被跟踪的文件

将内容从暂存区提交到本地仓库当前分支

git commit -m '注释内容'

查看提交日志

git log 查看本地仓库中的提交日志

其中可以有很多参数

形式:git log [option]

options:

  • --all 显示所有分支

  • --pretty=oneline 将提交信息显示为一行

  • --abbrev-commit 使输出的commitId更加简短

  • --graph 以图的形式显示

版本回退

作用:版本切换

形式:git reset --hard commitID

commitID可以使用git log形式查看

如何查看已删除的版本记录

形式:git reflog

不需要进行管理的文件

创建.gitignore文件 告诉git哪些文件不需要管理

可以在其中使用通配符的形式 来告诉git哪些文件不需要管理

7.分支

什么是分支

几乎所有的版本控制都以某种形式支持分支,使用分支意味着可以把自己的工作从开发主线分离下来进行bug修改或者新功能开发,防止影响开发主线

查看本地分支

git branch

创建本地分支

git branch 分支名

切换分支

git checkout 分支名

创建并切换分支

git checkout -b 分支名

合并分支

git merge 分支名

一般是在要合并分支上执行,加入要把dev分支合并到master分支,那么就要先checkout到master分支,然后使用命令git merge dev

删除分支

不支持删除当前分分支,只能删除其他分支

git branch -d [分支名] 需要进行文件的检查

git branch -D [分支名] 不需要做任何检查 直接删除

解决冲突

当两个分支同时修改一个文件并提交到同一分支时可能会出现冲突,例如修改了同一文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下

1.处理文件中冲突的地方

2.将解决完的冲突加入暂存区 add

3.提交到本地仓库 commit

冲突如下:

在dev01分支下修改了123.txt并提交

在master分支下也修改了123.txt并提交

然后再master分支merge合并dev01分支,就会出现冲突:

如上图:git不知道改使用哪个修改作为最终的版本,所以将控制权交给了开发者,这时解决冲突的方式就是直接修改123.txt文件,留下来我们需要的东西,我们将dev01分支提交的版本直接删除即可

因为修改了文件,那么git默认就会追踪到这样的状态,使用git status可以看到修改状态并没有被放进暂存区,所以需要git add加入暂存区后,git commit提交到本地仓库,即可解决冲突

以上是简单的冲突解决流程

开发中分支使用原则与流程

  • master (生产)分支

    线上分支,主分支,中小规模项目作为线上运行应用对应的分支

  • develop (开发)分支

    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要合并到master分支,准备上线

  • feature/xxx分支

    从develop创建的分支,一般进行同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支

  • hotfix/xxx分支

    从master派生的分支,一般作为线上bug修复,修复完成后需要合并到master、test、develop分支

  • 还有一些其他的分支比如test分支(用于代码测试)、pre分支(预上线分支)等等

8.git远程仓库

常用托管服务[远程仓库]

git中存在两种类型的仓库,远程仓库和本地仓库,如何搭建远程仓库捏?最常使用的是互联网上提供的一些代码托管服务,例如Github,Gitee等

码云

注册码云,直接浏览器里面搜就ok

建立仓库

跟着指示走

创建ssh公钥

1.生成ssh公钥

ssh-keygen -t rsa

一直回车

如果公钥存在了,那么这次新产生的公钥就会将之前的公钥覆盖

2.Gitee账户设置公钥

获取公钥

cat ~/.ssh/id_rsa.pub

3.验证配置是否成功

ssh -T git@gitee.com

操作远程仓库

添加远程仓库

命令:git remote add [远程仓库名] [仓库路径]

远程仓库名默认是origin,取决于远程服务端的设置

仓库路径,从远程服务器获取URL

仓库URL可以点击进gitee的仓库中

在克隆/下载中找到远程仓库的URL

如果指令没报错,一般就成功了^_^

查看远程仓库

git remote

推送远程仓库

命令:git push [-f] [--set-upstream] [远端名称 [本地分支名] [:远端分支名]]

如果本地分支和远端分支名相同可以只写本地分支

git push origin master

-f 强制覆盖,如果提交内容有冲突,以本次提交为准

--set-upstream推送到远端的同时并建立起和远端分支之间的关联联系

git push --set-upstream origin master

如果当前分支已经和远端分支相关联,就可以省略分支名和远端名

git push

将master分支推送到已关联的远端分支

如果没有关联本地分支和远程分支 直接使用git push不起作用,因为git不知道将这次提交push到哪一个分支,需要我们指定,在第一次指定过后,就可以直接git push了

本地分支和远程分支的关联关系

查看关联关系可以使用

git branch -vv

从远程仓库克隆

如果已经有一个远程仓库了,那么我们可以将它clone到本地

命令:git clone <仓库路径> [本地目录]

本地目录可以省略,会自动生成一个目录,目录名一般就是远程仓库的名字

从远程仓库拉取和抓取

远程分支和本地分支一样,都可以进行merge操作,只是需要把远程仓库里的更新都下载到本地,再进行操作

抓取:git fetch [remote name] [branch name]

抓取指令就是将仓库中的更新都抓取到本地,不会进行合并

如果不指定远程名称和仓库名,则抓取所有分支

拉取:git pull [remote name] [branch name]

拉取指令就是将远程仓库的修改拉取到本地自动进行合并,等同于fetch+merge

如果不指定远程名称和仓库名,则拉取并更新当前所有分支

解决合并冲突

在一段时间内,A、B同时修改了同一个文件,并修改了同一行位置的代码,此时会发生合并冲突

A用户在本地修改代码后优先推送到本地仓库,此时B用户在本地修改代码,提交到本地仓库后,需要推送到远程仓库,此时B用户晚于A用户,所以需要先拉取远程仓库的提交,经过合并后才能推送到远端分支

在B用户拉取代码时,因为A、B用户同一时间段修改了同一个文件的同一行代码,所以会发生合并冲突,因为pull包含了merge操作

远程分支也是分支,所以解决冲突的方式和解决本地冲突的方式相同,就是直接修改文件,再进行push即可

简单来说,就是我们提交修改push之前,需要先将远程仓库最新的状态拉取下来进行合并,查看有没有冲突,如果有冲突,在本地解决之后,在进行推送到远程仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值