关于Git的二三事

前言

这是一个关于Git的小文章。

Git是什么?Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。参照:关于GIT开发的背景故事

GIT的概念

代码存放的3个地方:

  • Workspace: 工作区,就是你平时存放项目代码的地方
  • Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

在这里插入图片描述

一般的代码的标识:

  • Branch:代码分支,代码的一个历史的路径。
  • Tag:代码标签,记录一个特点版本的代码。
  • commitId:每个版本的代码都有唯一的40位的哈希值
  • HEAD:指向当前代码的版本的指针。

在这里插入图片描述

无脑日常操作:

  • git add:将文件注册到git仓库中,对每个文件都会得到一个objectId,使其被git监控
  • git commit:将当前所有的文件版本进行提交,生成一个代码版本commitId
  • git push:将当前的版本提交至Remote中,这样就可以和其他人共享代码

在这里插入图片描述

远程GIT的设置

Git仓库,一般来说都是维护在github或gitlab上面。当然,由于本身git属于分布式的版本管理,那这含义就是每个人都会拥有全部的一个仓库,所以本地的一些文件也是可以用git来进行版本控制,只不过对于大文件的版本控制,git会相对比较吃力,这主要和git本地的版本控制原理有关。

初始化github仓库时,会有下面的2个文本:

…or create a new repository on the command line

echo "# demo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin [email protected]:artikell/demo.git
git push -u origin main

…or push an existing repository from the command line

git remote add origin [email protected]:artikell/demo.git
git branch -M main
git push -u origin main

这2个操作的区别就是在于:当前本地是否已经存在仓库?

那么可见,新建仓库的操作就是:

git init
git add README.md
git commit -m "first commit"

当然,这2个操作的共性代码可见就是:

git remote add origin [email protected]:artikell/demo.git
git push -u origin main

这个操作的含义就是注册远程地址:把仓库注册一个叫origin远程链接,然后再push到origin中。

原有的master由于政治正确被改成了main了。

而,其中github中的注册远程本身也有讲究:HTTPS or SSH?

在这里插入图片描述

无脑的判断就是:懒否?不想每次push输入密码(当然https也可以存储密码),那就使用SSH吧。但SSH密钥对的公钥上传至服务器。

而https则可以用在公用服务器上面,这样2个人可以互相使用自己的账号进行提交。

简单GIT的设置

每次提交都是自己的劳动,必须带上自己的名字,所以,我们需要告诉git我们叫什么!

    $ git config --global user.name "iamstarlee"
    $ git config --global user.email "[email protected]"

其中,--global的含义就是是否对当前用户生效,如果对系统生效是--system,对仓库生效则是--local,这样就可以对仓库的提交人进行不同的设置。

然后,为了偷懒,我们肯定还需要设置SSH秘钥。那么,我们就需要看看,现在有没有秘钥?正常的linux系统,大部分的配置都是在用户目录(~/)下面,所以,我们只需要cat命令查看一下即可。

cat ~/.ssh/id_rsa.pub

如果报了No such file or directory错误,那就说明不存在,那就需要生成一个秘钥。简简单单一个命令:

ssh-keygen -t rsa -C "[email protected]"

然后一路回车。最后再使用cat命令查询。
而后,把文件的内容复制到https://github.com/settings/ssh/new的KEY文本框中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdUlsZLw-1634545944877)(evernotecid://390F6B35-6AB1-4223-A0D2-878BAD026AC8/appyinxiangcom/37642702/ENResource/p22)]

最终,优秀的你,就可以使用ssh进行提交代码啦。

当然如果秘钥已经被其他用户使用,也是会出现异常的。

GIT工作流

如何使用git会更标准呢?这就要说道git本身的分支控制。

git branch <feature_name>
git checkout <feature_name>
git merge <feater_name>

以上操作分别是:创建分支、切换分支、合并分支。
而在正常的仓库版本里面,可以分为3类分支:

  1. master主分支,维护正常可用的分支
  2. feature功能分支,对每个功能进行开发的分支
  3. hotfix修复分支,对功能进行修复的分支。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvcZkG30-1634545944878)(evernotecid://390F6B35-6AB1-4223-A0D2-878BAD026AC8/appyinxiangcom/37642702/ENResource/p23)]

一般的开发流程是由开发人员在feature分支中进行开发,最终merge到主分支中。而在出现线上异常时,则从master中新建hotfix分支,修复后直接合并master分支。

而,对于特殊的master主分支版本,则会通过git tag来进行标记,这样就可以快速定位到相关版本的代码,这也是很多开源项目版本发布的基础。

这里面,就会涉及到分支的差异查看,就是git diff命令。这有空可以再讲。

日常GIT的问题

  1. 有些文件不想提交怎么办?
    答:根目录下面新增一个.gitignore文件,然后写上你不喜欢的文件或文件夹即可。类似画个圈圈诅咒它。
  2. git add了,但是又不想提交了怎么办?
    答:git reset HEAD <file>,使用git reset命令来将文件从暂存区移除。
  3. git commit了,但是提交错了,怎么办?
    答:还是git reset命令。git reset --soft HEAD^,其中的--soft表示不撤销add操作,而如果想一路撤回完,那就使用git reset --hard HEAD^HEAD^表示当前版本的前一个版本,有多少个^表示前多少个版本。
  4. 如果都push到远程仓库了。那可怎么办?
    答一:最好用但是最不能用的方法就是git push -f,先git reset回滚至对应的版本,然后强制把当前的master提交给远程。(但是,这个操作会引发版本的丢失,故一般不用)
    答二:只能再将代码手动回滚,然后提交新的版本。

猜你喜欢

转载自blog.csdn.net/qq_41731507/article/details/120829169