Git版本控制管理

Git基础_环境配置

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。

设置用户信息

shell 复制代码
git config --global user.name "Bandits"
git config --global user.email "gb010704@163.com"

查看配置信息

检查当前的设置

shell 复制代码
git config --list
git config user.name

注意:

通过上面的命令设置的信息会保存在~/.gitconfig文件中。

Git基础_本地初始化仓库

shell 复制代码
git init

小提示:

git init 命令会在上述目录中创建一个名为 .git 的隐藏目录,并在其中创建一个版本库。该目录为文件,查看->显示隐藏目录。

Git基础_文件的两种状态

注意:

Git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。

untracked未跟踪

未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制.通过git add 状态变为Staged.

tracked已跟踪

被纳入版本控制

  • Unmodified

    文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。

  • Modified

    文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout则丢弃修改过,返回unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。

  • Staged

    暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified。

注意:

  • 新建文件--->Untracked
  • 使用add命令将新建的文件加入到暂存区--->Staged
  • 使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
  • 如果对Unmodified状态的文件进行修改---> modified
  • 如果对Unmodified状态的文件进行remove操作--->Untracked

查看文件状态命令

shell 复制代码
git status

参数:

-s: 简洁输出

Git基础_文件加入暂存区

文件加入暂存区命令

shell 复制代码
git add 文件名

文件取消暂存区命令

shell 复制代码
git reset 文件名

Git基础_文件提交与删除

如果仅是通过git add命令把移动加到暂存区,还不算是完成整个流程。如果想让暂存区的内容永久保存下来,就要使用git commit命令。

文件提交命令

语法结构:

shell 复制代码
git commit -m "提交信息"

参数:

  • -m : 本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以重点是说清楚,能让自己和别人很快明白就行。

如果不加m参数,会进入类似vim编辑。

修改commit记录

要改动Commit记录有几种方式。

(1)把.git目录整个删除(不建议)。

(2)使用git rebase命令来改动历史记录。

(3)先把 Commit用git reset命令删除,整理后再重新Commit。

(4)使用--amend参数改动最后一次的Commit。

使用--amend参数进行Commit

首先先查看一下我们的提交记录

shell 复制代码
git log --oneline 

此时最后一次提交的记录 写的提交信息不合理,只需要在Commit命令后面加上--amend即可

shell 复制代码
git commit --amend -m " new  message "

Git基础_删除文件

shell 复制代码
git rm 文件名

这将删除指定文件并将删除操作添加到暂存区中,然后你可以通过提交来永久删除该文件(删除掉本地仓库中文件)。

想要删除远程仓库中的文件就需要进行推送当前的分支

shell 复制代码
git push origin 分支名

Git基础_将文件添加至忽略列

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为 .gitignore的文件(文件名称固定),列出要忽略的文件模式。

忽略规则

# / 表示 当前文件所在的目录
# 忽略public下的所有目录及文件
/public/*
#不忽略/public/assets,就是特例的意思,assets文件
不忽略
!/public/assets
# 忽略具体的文件
index.class
# 忽略所有的class
*.class
# 忽略 a.class b.class
[ab].class

注意:

  • #匹配规则和linux文件匹配一样
  • #以斜杠"/"开头表示目录
  • #以星号"*"通配多个字符
  • #以问号"?"通配单个字符
  • #以方括号"[]"包含单个字符的匹配列表
  • #以叹号"!"表示不忽略(跟踪)匹配到的文件或目录

Git基础_日志记录操作

查看日志

语法结构:

shell 复制代码
git log

参数:

--graph : 查看分支合并图

--oneline : 标记把每一个提交压缩到了一行中

获取执行过的命令

语法结构

shell 复制代码
git reflog

Git基础_比较文件差异

diff是指的是两个事物的不同。例如在Linux系统中,diff命令会逐行比较两个文本的差异然后显示出来。

git diff命令格式

语法结构:

shell 复制代码
git diff 

Git技术中显示暂存区和工作区文件的差异

shell 复制代码
git diff --cached 

Git技术中对比暂存区和版本库文件的差异

Git基础_还原文件

对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区。

对于修改的文件有三种情况:

  • 只是修改了文件,没有任何 Git 操作
  • 修改了文件,并提交到暂存区(即编辑之后,gitadd但没有gitadd但没有 git commit -m ...)
  • 修改了文件,并提交到仓库区(即编辑之后,gitadd和gitadd和 git commit -m ...)

情况I

只是修改了文件,没有任何 git 操作,直接一个命令就可回退

shell 复制代码
git checkout -- 文件名

情况II

修改了文件,并提交到暂存区(即编辑之后,git add但没有gitadd但没有 git commit )

  1. 先将暂存区的撤销掉
shell 复制代码
git reset 文件名 # 回到当前版本只是 修改未添加到暂缓区
  1. 此时在使用情况I就可以恢复
shell 复制代码
git checkout -- 文件名 # 恢复到本地仓库中的版本

情况III

修改了文件,并提交到本地仓库区

  1. 查看一下提交记录
shell 复制代码
git log --oneline
  1. 进行版本回退
shell 复制代码
git reset HEAD^
  1. 从本地仓库进行恢复
shell 复制代码
git checkout -- 文件名

注意:

git reset 版本号 ---- 将暂缓区回退到指定版本,根据 $ git log --oneline 显示的版本号,可以回退到任何一个版本,也可通过HEAD 来指定版本。

  • HEAD 当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本

Git远程仓库_常用的Git代码托管平台

常见远程仓库托管平台

我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。

  • GitHub (地址: https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯的版本库格式进行托管,故GitHub。
  • 码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。
  • GitLab (地址: https://about.gitlab.com/是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的we务。

Git远程仓库_注册码云账号、创建远程仓库

登录码云

注册完成可以使用刚刚注册的邮箱进行登录(地址:www.gitee.com/login

创建Git远程仓库

Git远程仓库_远程仓库操作

添加远程仓库

添加一个新的远程Git仓库,同时指定一个可以引用的简写。

shell 复制代码
git remote add <shortname><url>

注意:

  • shortname :远程的名字(可以随意取名)
  • url : 远程仓库地址

查看远程仓库

shell 复制代码
git remote

克隆远程仓库

shell 复制代码
git clone  远程仓库地址url

移除无效的远程仓库

shell 复制代码
git remote rm 远程仓库名字

注意:

此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库。

Git远程仓库_推送、抓送和拉取

Git远程仓库_推送

shell 复制代码
git push 仓库名 要推送的分支名称

从远程仓库中抓取与拉取

shell 复制代码
git fetch 
shell 复制代码
git pull

注意:

  • git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge,想看见文件就需要手动进行合并文件 git merge origin/master 。
  • git pull是从远程仓库获取最新版本到本地仓库,会自动merge

Git远程仓库_多人协作冲突问题

为什么会出现冲突问题

  1. 多人同时修改同一文件的相同部分
  2. 在当前分支上修改了未合并的提交

Git远程仓库_SSH协议推送

Git支持的传输协议

  • 本地协议(Local)
  • HTTPS协议
  • SSH(Secure Shell)协议
  • Git协议

什么是SSH协议

SSH为Secure Shell(安全外壳协议)的缩写,由IETF的网络小组(Network Working Group)所制定。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

配置SSH协议

1.使用命令ssh-keygen -t rsa生成公钥和私钥

shell 复制代码
ssh-keygen -t rsa

注意:

执行完成后在window本地用户.ssh目录(C:\Users\用户名.ssh)下生成如下名称的公钥和私钥。

2.复制公钥文件内容至服务器上

Git分支__使用分支原因

查看分支

shell 复制代码
git branch

参数:

  • -r : 列出所有远程分支
  • -a :列出所有本地分支和远程分支

创建分支

shell 复制代码
git branch 分支名字

参数:

  • -m 修改分支名字

切换分支

shell 复制代码
git checkout 分支名字

Git分支_推送至远程仓库分支

shell 复制代码
git push 远程仓库名字 分支名字

创建并切换分支

shell 复制代码
git checkout -b 分支名称

Git分支

合并分支

语法结构

shell 复制代码
git merge 要合并的分支名称

删除本地仓库分支

语法结构:

shell 复制代码
git branch -d 要删除的分支名称

参数:

  • -d 删除本地分支
    注意:
    如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D 。

如果不小心把还没合并的分支删除了,救得回来吗

cat分支是从master分支出去的,当前领先master分支两次Commit,而且还没有合并过。这时如果试着删掉cat分支,它会提醒:"这个分支还没全部合并哦"。

shell 复制代码
$ git branch -d cat
error: The branch 'cat' is not fully merged.
If you are sure you want to delete it, run 'git branch -D cat'.

虽然Git这么贴心的提醒了,但这里仍然把它删除了

shell 复制代码
git branch -D cat
Deleted branch cat(was b1729234)

分支只是一个指向某个Commit的指标,删除这个指标并不会使那些Commit消失。

我们可以根据这个ID创建回来这个分支

shell 复制代码
git branch new_cat b2323b

删除远程仓库分支

shell 复制代码
git push origin -d 分支名称

Git标签

标签与分支有什么区别

标签与分支的区别是,分支会随着Commit而移动,但标签不会。之前介绍过当Git往前推,进一个Commit时,它所在的分支会跟着向前移动。而标签一旦贴上去不管Commit怎么前进,标签都会留在原来贴的那个位置上。因此,分支可以看成是"会移动的标签"。

列出已有标签

语法结构

shell 复制代码
git tag 

创建标签

语法结构

shell 复制代码
git tag 标签名字

查看标签信息

语法结构

shell 复制代码
git show 标签名

标签推送到远程仓库

语法结构

shell 复制代码
git push 远程仓库名 标签名

检出标签

新建一个分支,指向某个tag

shell 复制代码
git checkout -b 新的分支名 已有的标签名

删除本地标签

语法结构

shell 复制代码
git tag -d 标签名

删除远程标签

语法结构

shell 复制代码
git push origin :refs/tags/标签名字

注意:

:refs/tags/是固定写法。

Git工作流_Git Flow是什么

Git Flow是什么

在使用Git的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。GitFlow工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

Git Flow 的常用分支


解释:

  • master 主干分支,开发完成的上线的项目版本

  • hotixes 热部署分支,进行主干分支的补丁操作

  • release 预部署分支,测试工程师的调用的分支

  • develop 开发分支,开发源代码分支

  • feature 功能分支,你们调用分支

  • Master/Devlop 分支

    所有在Master分支上的Commit应该打上Tag,一般情况下Master不存在Commit,Devlop分支基于Master分支创建

  • Feature 分支

    Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留。

  • Release 分支

    Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature 发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。

注意:

一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支。

  • Hotfix 分支
    hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。
    在这里插入图片描述
相关推荐
Good_Starry13 小时前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云端奇趣18 小时前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
F_D_Z1 天前
【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
网络·git·网络协议·ssl
等风来不如迎风去1 天前
【git】main|REBASE 2/6
git
艾伦~耶格尔1 天前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康1 天前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea
睡不醒的小泽1 天前
git merge 和 git rebase
git
艾伦~耶格尔1 天前
Git 下载及安装超详教程(2024)
git·gitee·码仓
weixin_438197381 天前
linux部署redis,整合ansible和redis
linux·redis·git
安全在心中1 天前
gitee公钥设置、创建库及使用
git·gitee