|
目录
1Git简介和安装
1.1?git介绍
1.2 git的优势
1.3? Git的安装
1.4 git协作方式
2 Git工作原理
2.1 概念介绍
2.2 git 工作流程
2.3 本地仓库远程仓库联系?编辑
?2.4 Git创建版本库/初始化
2.5 git底层原理
2.6 git的文件管理机制
3 在GitHub上创建远程仓库并获取token
3.1github创建一个远程仓库?编辑
3.2 获取自己GitHub的token
4 创建idae项目并且通过git连接远程仓库
4.1 可视化方式详细步骤
4.2 命令行方式操作步骤
4.3实战过程问题汇集
5 git分支管理
5.1 分支的创建与合并
5.2 分支冲突解决
5.3 分支merge还是rebase?
5.4 分支常见问题
6 Git中常用命令和高级命令
6.1 git初始化和设置签名
6.2 git基础操作
6.3 分支相关的命令
6.4 其他命令
7.?git其他总结
1Git简介和安装
1.1?git介绍
? ? ? ??Git是分布式版本控制系统。而GitHub网站为开源项目免费提供Git存储。
? ? ? ? 补充一下分布式版本控制系统与集中式版本控制系统有何不同呢?
? ? ? ??首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
? ? ? ??多个人如何协作呢?
? ? ? ? 比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。
? ? ? ? ?而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
1.2 git的优势
-
完整协议支持 -
在线文件编辑 -
社交网络元素 -
特色工作模式 -
列表内容私有仓库托管
1.3? Git的安装
? ? ? ? ? mac的安装请见我的另外一篇博客:
? ? ? ? ? Git版本控制和协同工作(附带介绍Mac的brew工具)_斑马!的博客-CSDN博客
1.4 git协作方式
1)团队内部协作

2)跨团队协作

2 Git工作原理
2.1 概念介绍
2.2 git 工作流程
????????经过执行 git add . 命令之后会将工作区的文件添加到暂缓区中,再经过执行 git commit -m "说明文字" 命令之后,会将暂缓区的文件添加到版本库的分支当中去。

2.3 本地仓库远程仓库联系

?2.4 Git创建版本库/初始化
????????git init:(个人仓库)仓库初始化
???????首先我们在桌面新建一个 project 空文件夹之后,鼠标右键以 git bash here 打开 Git 终端,输入 git init 命令之后,观察 project 文件夹之后多了一个隐藏文件夹 Git 目录。这时我们就创建好了一个受 Git 管理的仓库,这个仓库就在本地。【注意】.git目录是隐藏目录,我们要想办法进入隐藏目录才可以看见该文件里面的内容。
2.5 git底层原理
????????底层通过一个哈希进行明文加密得到密文。哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
-
不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。 -
哈希算法确定,输入数据确定,输出数据能够保证不变 -
哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 -
哈希算法不可逆 -
Git 底层采用的是 SHA-1 算法。 -
哈希算法可以被用来验证文件。原理如下图所示,Git 就是靠这种机制来从根本上保证数据完整性的。 
2.6 git的文件管理机制
????????Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。

3 在GitHub上创建远程仓库并获取token
3.1github创建一个远程仓库
3.2 获取自己GitHub的token
????????因为现在在idea中使用git,不能通过账号密码来登陆,需要通过token登陆。
- 方法一:直接进入这个链接(前提是你要先登陆你的帐号): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://github.com/settings/tokens
- 方法二:登陆自己的GitHub-- setting--development--personal access tokens--填写token用途和到期时间--产生token;注意事项:尽量勾选select scopes,否则会显示Incorrect credentials. Insuffucuent scopes granted to token;
4 创建idae项目并且通过git连接远程仓库
4.1 可视化方式详细步骤
????????1)在idea中创建完项目之后,点击菜单里面vcs -- enable version control integration--git
integration--git在idea中使用git

? ? ? ?2)点击git后就可以进行git命令的相关操作;
???????3)我们先进性commit把文件从工作区放到本地仓库的暂存区,然后push

???????4)push之后,会显示master->define remote

???????5)点击 define remote后,会出现下图所示name和url,其中name我们填写在GitHub上创建的远程仓库名称,URL我们复制远程仓库的https.

6)点击OK后,idea中除了本地仓库local的分支,还会出现远程仓库remote的情况?

? ? ??7)此时去远程仓库看一下,还会发现我们以及可以看到本地仓库提交的内容了;
???????8)我们在本仓库新建一个分支,在local上面右键选择new branch from selected,此时新创建the_first_branch就是我们的第一个默认的当前分支。

???????9)在当前the_first_branch进行修改项目内容,修改完后,我们进行commit和push.
??????10)此时就可以在GitHub看到我们提交的the_first_branch分支。
??????11)在githu网站点击pull requests,然后点击compare & pull request,在comment里面填写相关信息,最后点击create pull request.

? ? ? ? ? ?注意,要选择好对应的分支

??????12)这样就相当于把我们本地仓库的the_first_branch分支添加到了我们远程仓库的master分支。(注意选择好base的master分支,和要被合并的分支)。
??????13)此时我们的工作区还是本地仓库的the_first_branch,也就是说工作区还是修改后的代码,但是如果此时,我们切换到本地local的the master分支,即右键master分支,然后checkout一下,就可以看到工作区变成了master分支的代码,也就是最开始的代码。

?????????14)此时点击idea右上方的update project按钮,会弹出两个选项。

????????第一个选项:Merge the incoming changes into the current branch:将传入的更改合并到当前分支中(常用);? ? ? ? ??
?????????第二个选项:Rebase the current branch on top of the incoming changes:在传入更改的基础上重新建立当前分支。

? ? ? ? 这样本地仓库里面的内容就和远程仓库一样了。
4.2 命令行方式操作步骤
? ? ? ? 见git命令即可。?
4.3实战过程问题汇集
1)如何解决There isn’t anything to compare?
????????# 切换分支至master
????????git checkout master
????????# 强制重命名master分支为main分支
????????git branch main master -f
????????# 切换分支至main
????????git checkout main
????????# 强制推送本地main分支至远程库,并覆盖远程main分支内容
????????git push origin main -f
2)如何解决??We were unable to authorize you in GitHub. Sorry for inconvenience, please try again later. IDEA2021??????????
? ? ? ? 在idea中授权即可。
3)如果网上是别人GitHub的项目,如何拉取到本地idea中?
????????我们也可以直接通过 IDEA 拉取代码,依次进入 File -> New -> Project from Version Control,将我们在所复制的仓库库地址 url 填入 URL,然后 Version control 选择 Git,Directory 则是我们要存放该代码的本机路径,后面拉取下来的代码将放在该路径中。
4)IDEA的GIt显示不全远程分支或者不显示远程remote
???????idea右上方git拉取一下(update project就行)
5)关于Support for password authentication was removed on August 13, 2021报错的解决方案?
?????????出现原因:从 2021 年 8 月 13 日开始,我们将在对 Git 操作进行身份验证时不再接受帐户密码,并将要求使用基于令牌(token)的身份验证,例如个人访问令牌(针对开发人员)或 OAuth 或 GitHub 应用程序安装令牌(针对集成商) 上所有经过身份验证的 Git 操作。 您也可以继续在您喜欢的地方使用 SSH 密钥。
???????解决方案:使用token登陆。
???????应用:在用命令行操作的时候,把token直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入token了
????????git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
?其中
注意:尖括号要去掉哈。 https://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@github.com/shliang0603/Yolov4_DeepSocial.git/
6)如何解决fatal: refusing to merge unrelated histories? ? ? ? ? 在你操作命令后面加 --allow-unrelated-histories。
????????eg:git merge master --allow-unrelated-histories
5 git分支管理
5.1 分支的创建与合并
????????在Git里,这个分支叫主分支,即master分支/
-
git branch:列出所有分支; -
git branch <name> :创建新分支; -
git checkout <branch_name> :切换到这个分支; -
git merge <branch_name>? :将branch_name合并到master分支; -
git branch -d <branch_name> : 删除分支。 -
git tag <tag_name> :给分支打标签 -
git tag: 查看所有标签。
5.2 分支冲突解决
????????GitHub合并分支的时候显示有conflict?
????????参考:Git 解决合并分支时的冲突 - 走看看
1)显示有冲突的现象
2)产生冲突的原因?
????????创建分支的时候,新分支的文件内容建立在原分支的基础上.我们以当前master分支做为基准分支,首先在master分支上新建一个第一个分支the_first_branch,然后在master分支上新建第二个分支the_second_branch,当我们修改the_first_branch上面内容的时候,把the_first_branch的修改merge得到master后,如果此时再去修改the_second_branch的内容,并且想把the_second_branch的修改merge到master上,就会产生冲突,因为当前的master是合并the_first_branch后的master,而不是原来单一的master了,也就是说这两个master是不一样的,这样会导致冲突产生。

3)如何解决冲突
注意事项:如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。
5.3 分支merge还是rebase?
从远程拉取到本地的选项如何选择?
????????参考:如何选择(合并冲突)
????????第一个选项:Merge the incoming changes into the current branch:将传入的更改合并到当前分支中(常用);
????????merge 是非常好的,因为它是非破坏性的操作。现有的分支不会以任何方式改变。这避免了rebase(将在下面讨论)的所有潜在缺陷。也就是把远程仓库的master分支的内容拉取到本地仓库里面,比如说我们可以通过切换本地仓库为master分支,然后执行这条命令就可以保持本地仓库的master分支是远程仓库最新的内容。
????????第二个选项:Rebase the current branch on top of the incoming changes:在传入更改的基础上重新建立当前分支。
????????rebase, 这个命令会始终把你最新的修改放到最前头。比如你对主branch进行rebase以后, 你的所有修改就会在主branch当前所有的修改之前。你会更有信心保证你的代码运行畅通无阻。通过你自己的测试以后, 你就可以放心的把代码合并到主的branch里面了。
5.4 分支常见问题
1:在idea右上角update project的时候,发现工作区/本地仓库当前被选中分支内容并没有改变?
????????可能是因为在GitHub上面被修改的分支没有添加到master分支上去,需要merge到master分支上去。
2.如何解决idea的update提示Can't Update No tracked branch configured for branch master or branch?
????????参考:解决方案
????????问题原因:git不知道你要pull远程的哪个分支。
????????解决办法:检查远程分支是否存在,如果存在,(可进行更具体配置,不展开)
????????????????????输入命令git branch --set-upstream-to=origin/master
3.push to origin/master was rejected错误解决方案?
????????问题原因:远程仓库里面有初始化留下的readme等文件,而本地仓库没有,这样提交的时候就会产生上述问题。(一般发生在第一次提交项目的时候)
????????解决方案:
6 Git中常用命令和高级命令
6.1 git初始化和设置签名
-
git init: 数据仓库初始化; -
git config –global user.name? “geekfanr”:设置提交仓库时的用户名信息; -
git config –global user.email “1111@gmail.com”: 设置提交仓库时的邮箱信 -
git config –-list :显示当前的Git配置。
6.2 git基础操作
-
git status: 查看工作区,暂存区状态; -
git add <file_name> :将文件添加到暂存区; -
git commit -m “注释”? <file_name>:将暂存区该文件添加到本地仓库; -
git log :查看历史记录; -
git diff? <文件名> :将工作区中的文件与暂存区进行对比
6.3 分支相关的命令
-
git branch:列出所有分支; -
git branch <name> :创建新分支; -
git checkout <branch_name> :切换到这个分支; -
git merge <branch_name>? :将branch_name合并到master分支; -
git branch -d <branch_name> : 删除分支。 -
git tag <tag_name> :给分支打标签 -
git tag: 查看所有标签。 -
pull=fetch+merge -
git fetch [远程库地址别名] [远程分支名] -
git merge [远程库地址别名/远程分支名] -
git pull [远程库地址别名] [远程分支名]
6.4 其他命令
????下载远程仓库到当前路径:git clone 仓库的URL
???????????????下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径
7.?git其他总结
? ? ? ? Fork的作用:ork的意思是从别人的代码库中复制一份到你自己的代码库,与普通的复制不同,fork包含了原有库中的所有提交记录,fork后这个代码库是完全独立的,属于你自己,你可以在自己的库中做任何修改,当然也可以通过Pull Request向原来的库提交合并请求。
????????Watch,就是关注,关注后,代码库中有新的commit你都会收到通知。
???????Star,与watch不同,star相当于收藏,你可以方便地找到你star过的库,但是不会收到关于那个库的任何通知。
|