Git系列:git知识收集(持续更新中)

646 阅读6分钟

1、git的配置

 //配置邮箱
 git config --global user.email "xxx@xxx.com"
 ​
 //配置用户名
 git config --global user.name "xxx"
 ​
 //查看配置信息
 git config --list

解惑1:这里配置 用户名 和 邮箱有什么作用呢?

远程仓库一般支持两种协议:SSHHTTPSSSH协议只认机器,HTTPS协议只认账号;

如果使用SSH操作远程仓库的话,我们需要使用公钥和私钥对来做权限的认证;

如果使用HTTPS操作远程仓库,则需要使用账号密码来做权限的认证。

所以说无论是公钥私钥对,还是账号密码,都只做权限的认证;但是远程仓库里需要记录这些提交记录是由谁来完成的;所以我们需要给本地的git设置用户名和邮箱,用于从本地仓库向远程仓库提交记录时,在远程仓库记录下这些操作是由谁来完成的。

简单的来说: 就是知道是谁commit的内容。

解惑2:怎么配置免密commit?

 git config --global credential.helper store
 // --gloabl   针对该电脑的所有项目
 // 如果不要,就只是针对该项目

第一次需要输入密码,然后机会记录下面,以后的操作就不需要了。

执行完命令之后,查看是否命令是否执行成功:

config1.png

并且,还会在用户目录下生成文件.git-credential记录用户名密码的信息。

登录失败问题:在git改了密码之后修改了配置文件的密码但是还是会出现access denied的问题的话,那么可能是Windows自动保存了gitlab的凭据,这时候手动删除用户凭据就可以了

搜索 windows 凭据就可以找到了

windows凭据的作用:

由于需要频繁地登录某服务器,所以每次都需要输入用户名和密码,特别是局域网服务器的访问,肯定很麻烦的。系统的凭据管理器其实就是一个系统组件,能够帮助完成本地访问时的认证工作。当用户第一次输入用户名和密码的时候,凭证管理器可以将这些访问凭据(用户、密码、证书等)保存在本地,再次访问该服务器站点时,系统会自动完成凭据的认证过程。


2、git pull的理解和使用

简单来说: git pull的作用就是拉取远程仓库的代码与本地仓库的代码合并。

 git pull = git fetch + git merge

2.1、认识 git fetch

看图说话:

git_fetch.png

解释:

o/main 是本地仓库的远程分支名。(origin/main: 远程仓库名/分支名

看下本地仓库中的远程分支只有一个commit:c1

远程仓库中: 还多了两个commit:c2c3

就说明:本地仓库的远程分支的内容 跟 远程仓库中的内容是不一致的。

那么,本地仓库的远程分支就需要拉取,跟远程仓库保持一致,所以就可以使用git fetch命令。

git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态;并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件。

2.2、git pull的执行机制

git_fetch1.png

从上面的图解过程中,就可以看出 git pull 的执行机制

HEAD 执行 main 分支

 git pull = git fetch  +  git merge o/main

当然,如果这里自己分步操作的话,这里的合并不一定是merge,还可以是rebasecherry-pick等合并操作。

2.3、git pull的具体用法

在上面,大致了解了git pull的执行机制,那么具体使用是怎么样的呢?

有三种写法形式,但是要记住一个原则:命令越复杂,越容易理解;命令简单了,理解就难了。

2.3.1、写法一

git pull <远程主机名> <远程分支名>:<本地分支名>

这是最完整的写法,也是最容易理解的写法。指定远程的某个分支与本地的某个分支合并。

 git pull origin master:dev
 // 远程分支 master 与本地分支 dev 合并

2.3.2、写法二

git pull <远程主机名> <远程分支名>

与写法一对比,就是缺少了本地分支名。那么省略的条件就是:远程分支名本地分支名的名称是相同的。

 git pull origin master
 // 等价于
 git pull origin master:master

2.3.3、写法三

git pull

没了,语法就这么简单。理解的话,就需要先知道什么是关联分支

如果不知道什么是关联分支,请看下面我写的这篇文章,也许你能找到答案。

Git系列:关联分支的认识和设置

如果理解了关联分支,那么 git pull 就应该很好的理解了。

git pull的作用:

如果远程仓库中的分支有最新的代码,并且本地分支与远程的分支相关联,那么就都会拉取下来。

比如:

远程仓库中的 master 和 dev 都有新的commit(别人提交上去的),如果你本地有 master 和 dev,与之对应相关联;因为远程仓库已经更新,本地仓库没有更新,所以使用 git pull 时,远程仓库中master最新的内容就会被拉取下来,与本地的master进行合并,dev也是同样如此。

简单理解:git pull可以同时拉取多个分支,与本地与之关联的分支进行合并

3、git push的理解和使用

其实理解关联分支之后,git push也大致是这么一回事。

用法:git push <远程仓库名> <本地分支名>:<远程分支名>

本地分支推送到远程主机上对应的远程分支如果远程分支不存在,则会自动创建一个远程分支。

有三种情况(没有考虑参数的情况下):

 git push origin dev: master // 本地的dev提交到远程的master
 git push origin master // 把master推送到与之关联的分支上,如果没有,也会新建一个分支
 git push    // 若是当前分支只有一个远程分支与之关联,可以直接省略push后面的一切

一般情况下,如果分支关联好之后,就直接使用 git push 即可。

补充:后面还发现一种 git push origin,其实我感觉跟 git push差不多吧,可能是存在没有想到的情况

4、git tag标签

发布版本时候用的,打上一个标记,,便于回退版本。

 git tag -a 标签名 -m <附注信息>     //创建一个标签 并添加备注
 // -a annotate 注释   -m  message 信息
 ​
 git push origin --tags           //把本地tags推送到远端
 ​
 git show <标签名>           // 查看标签详情
 ​
 git tag -d <标签名>         // 删除标签

使用:

 git tag -a v1 -m '第一版'

5、删除分支

查看所有分支: git branch -a

删除本地分支: git branch -D <分支名>

删除远程分支: git push origin --delete <分支名>