Git学习

Git

Git工作流程

在这里插入图片描述

Git基本了解以及常用指令

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

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

基本配置

设置用户信息:
git config --global user.name “XXX” # 设置用户名
git config --global user.email “XXXX” # 设置邮箱

查询配置信息
git config --global user.name
git config --global user.email

为常用基本指令配置别名
  1. 打开用户目录,创建 .bashrc 文件

touch ~/.bashrc

  1. .bashrc文件中输入如下内容:

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

  1. 执行

source ~/.bashrc

创建本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库

  1. 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开Git bash窗口
  3. 执行命令git init
  4. 如果创建成功后可在文件夹下看到隐藏的.git目录

git init

在这里插入图片描述

基础操作指令

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

在这里插入图片描述

status查看修改的状态

作用:查看修改的状态(暂存区、工作区)

命令形式:

git status

add添加工作区到暂存区

作用:添加工作区一个或多个文件的修改到暂存区

命令形式:git add 单个文件名|通配符

git add file.txt # 添加单个文件
git add . # 将所有修改加入暂存区

commit提交暂存区到本地仓库

作用:提交暂存区内容到本地仓库的当前分支

命令形式:git commit -m ‘注释内容’

git commit -m “XXX update”

log查看提交日志

配置的别名git-log就包含了这些参数,所以后续可以直接使用指令 git-log

作用:查看提交记录

命令形式:git log [option] 或者 git-log

—all 显示所有分支
—pretty=oneline 将提交信息显示为一行
—abbrev-commit 使得输出的commitId更简短
—graph 以图的形式显示

在这里插入图片描述

版本回退

作用:版本切换

命令形式:

git reset --hard commitID # commitID 可以使用 git-log 或 git log 指令查看

git reflog # 查看所有操作的ID等信息

添加文件忽略列表

如图中所示:

在这里插入图片描述

在.gitignore中的书写内容是:
在这里插入图片描述

HEAD指向谁谁就是当前分支

在这里插入图片描述

分支

查看本地分支

git branch

创建本地分支

git branch 分支名

切换分支

git checkout 分支名

还可以直接切换到一个不存在的分支(先创建后 切换):

git checkout -b 分支名

合并分支

一个分支上的提交可以合并到另一个分支

git merge 分支名

删除分支

git branch -d 分支名 # 删除分支时,需要做各种检查
git branch -D 分支名 # 不做任何检查,强制删除

每一次创建分支都是复制一份master,作为一个新的分支的

解决冲突

合并时发现冲突
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)
开发中分支使用原则与流程

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

在开发中,一般有如下分支使用原则与流程:

  • master (生产) 分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;

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

  • feature/xxxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支,之后该分支可以删除。

  • hotfix/xxxx分支:从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。

还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等

在这里插入图片描述

在这里插入图片描述

远程仓库

连接远端仓库

码云为例:码云
首先于右上角的”+“—>”新建仓库“
在这里插入图片描述

新建后点击设置
在这里插入图片描述
点击SSH公钥
在这里插入图片描述

标题可随意输入

在这里插入图片描述

公钥如何寻找,前往Git Bash敲入以下命令

生成公钥

ssh-keygen -t rsa

后一路回车即可,出现如下情况就表示已经生成了公钥了

在这里插入图片描述

再键入:

输出公钥的内容

cat ~/.ssh/id_rsa.pub

生成了一长串的密钥,复制,粘贴入gitee的公钥处,并点击确定

后回到我们的Git Bash输入以下命令验证是否成功连接到gitee

ssh -T git@gitee.com

在这里插入图片描述

连接到本地仓库

下来就来连接一下刚刚创建的仓库:

复制仓库的链接

切换到Git Bush(一定要在前面新建的目录下采用.git文档)

创建远程仓库

命令:
远端名称:默认是origin,取决于远端服务器设置
仓库地址:从远端服务器获取此url

git remote add <远端名称> <仓库地址>

查看远程仓库

命令:

git remote

在这里插入图片描述

推送代码到远程仓库

如果远程分支名和本地分支名相同,则可以只写本地分支名

如:git push oigin master

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

  • -f 表示强制覆盖
  • –set-upstream推送到远端的同时并且建立起和远端分支的关联关系

在这里插入图片描述

切换到gitee看看
河里,已经推送成功

在这里插入图片描述

查看本地仓库与远程仓库的关系

命令:

git branch -vv

在这里插入图片描述

绑定关系:(上传仓库并绑定关系)

git push --set-upstream oigin master:master

如图所示未绑定关系

在这里插入图片描述
已经将本地的master与oigin绑定关系

绑定了关系就可以直接使用 git push进行直接推送代码

在这里插入图片描述

克隆 抓取 拉取

克隆

克隆刚才的远程仓库git_test,放在目录git_test中

在这里插入图片描述
命令:

git clone [克隆仓库SSH链接] [文件名称]
文件名不填写就默认为链接后部分。如:study

切换到你要的目录下键入git clone 的命令:

在这里插入图片描述

在这里插入图片描述

查看克隆仓库的日志

在这里插入图片描述
原仓库的日志

在这里插入图片描述

抓取

抓取的指令就是将仓库中的更新都抓取到本地,不会自动合并
如果不指定远端名称和分支名,则抓取所有分支

在本地克隆下的仓库中新建一个file06.txt,且将其推送至远程仓库

在这里插入图片描述

在这里插入图片描述

后使用原先的本地仓库进行抓取

git fetch

在这里插入图片描述
使用查看日志发现我们本地仓库比远端仓库要少一个版本,所以对其进行合并
git merge oigin/master

在这里插入图片描述
在这里插入图片描述

拉取

拉去指令就是将远端仓库的修改拉取到本地并自动合并,等同于fetch+merge
如果不指定远端名称和分支,则会抓取所有更新当前分支

命令:

git pull

案例演示与前面基本一致,创建新文件后进行上传且推送

后到本地仓库下进行拉取git pull

在这里插入图片描述

在这里插入图片描述

IDEA中的Git使用

在IDEA中操作Git

场景:本地已经有一个项目,但是并不是git项目,我们需要将这个放到码云的仓库里,和其他开发人员继续一起协作开发。

创建项目的远程仓库

gitee上操作即可

初始化本地仓库

在这里插入图片描述

选择项目:略

设置远程仓库

在这里插入图片描述

name一般默认origin
URL需要在gitee上复制刚刚仓库的SSH

在这里插入图片描述

后出现如下情况

在这里插入图片描述

已经提交过所以是空的

在这里插入图片描述

正常情况下会如图所示,很多文件

在这里插入图片描述

输入完成后点击Commit进行提交,下面也一路Commit即可

在这里插入图片描述

创建分支

方法一:最常规的方式

在这里插入图片描述

方法2:最强大的方式(可以随意在任何提交过的版本上进行新建分支)

在这里插入图片描述

总结

在IDEA的终端中可使用git命令来完成以上所有功能
切换分支前先提交本地的修改
代码及时提交,提交过了就不会丢

在这里插入图片描述

在这里插入图片描述

Git知识补充

rebase和merge

HEAD的理解

HEAD 指向当前所在的分支,类似一个活动的指针,表示一个「引用」。

HEAD 既可以指向「当前分支」的最新 commit,也可以指向历史中的某一次 commit (「分离头指针」的情况)。归根结底,HEAD 指向的就是某个提交点。

当我们做分支切换时,HEAD 会跟着切换到对应分支。

fast-forward 与 —no-ff 的区别
fast-forward

在这里插入图片描述

在这里插入图片描述

fast-forward 合并方式是条件允许的情况,通过将 master 分支的 HEAD 位置移动到 feature 分支的最新提交点上,这样就实现了快速合并。这种情况,是不会新生成 commit 的。(快进模式)

git checkout master # 先切换到master分支
git merge feature # 将feature分支合并到当前分支上(master)

在这里插入图片描述

–no-ff 的方式进行合并,master 分支就会新生成一次提交记录。

git checkout master # 先切换到master分支
git merge --no-ff feature # 将feature分支合并到当前分支上(master)

merge操作

git merge 操作是区分上下文的。当前分支始终是目标分支,其他一个或多个分支始终合并到当前分支。这个注意点记住了,方便记忆!所以,当需要将某个分支合并到目标分支时,需要先切到目标分支上。

快进模式能够进行的条件是:源分支和目标分支之间没有分叉。下图则是无法通过 HEAD 的快速移动实现分支的合并。

在这里插入图片描述

如果执行合并操作,默认会尝试 fast-forward 的方式进行合并,但是因为分叉了,所以此时会采用 no-ff 的方式进行合并,有新的 commit 生成了。最终的结果图如下:

git checkout master # 先切换到目标分支
git merge feature

在这里插入图片描述

rebase操作

rebase 合并往往又被称为 「变基」。这里的「基」就是一个「基点」、「起点」的意思。git rebase 命令通常称为向前移植(forward porting)。

变基」就是改变当前分支的起点。注意,是当前分支! rebase 命令后面紧接着的就是「基分支」。与merge操作相反。

git checkout feature # 切换到当前分支,或待变基分支
git rebase master # 变基

# 可合并为下面的语句
git rebase master feature

变基后:

在这里插入图片描述

解释:rebase,变基,可以直接理解为改变基底。feature分支是基于master分支的B拉出来的分支,feature的基底是B。而master在B之后有新的提交,就相当于此时要用master上新的提交来作为feature分支的新基底。实际操作为把B之后feature的提交存下来,然后删掉原来这些提交,再找到master的最新提交位置,把存下来的提交再接上去(新节点新commit id),如此feature分支的基底就相当于变成了E而不是原来的B了。(注意,如果master上在B以后没有新提交,那么就还是用原来的B作为基,rebase操作相当于无效,此时和git merge就基本没区别了,差异只在于git merge会多一条记录Merge操作的提交记录)

远程分支合并

该项职责由git管理员来完成。例如当开发分支Develop上的所有功能已经完成时,需要合并到master上时:

  1. 代码clone到本地仓库git clone
  2. 在本地创建dev分支并与远程dev分支对应git checkout -b dev origin/dev
  3. 切换到master分支git checkout master
  4. 本地的dev合并到master上(遇到冲突解决完后再次提交)git merge dev
  5. 推送到远程的master上(执行这项操作时,需要有操作远程master分支的权限)git push origin master
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值