零、 复习昨日
零、 复习昨日

下载Git https://git-scm.com/downloads
3.2 安装
安装,除了安装位置外,其他一直下一步即可
使用
git config --global user.name "Your Name"
git config --global user.name "qiushiju"
git config --global user.email "email@example.com"
git config --global user.email "237876779@qq.com"
git config -l
测试:cmd中执行 ,查看git版本
git version
五、仓库
对应的就是一个目录,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录,作为仓库。
仓库中的每个文件的改动 都由git跟踪。
5.1 新建仓库
选择一个目录,执行指令:git init
5.2 工作区
执行git init的目录即为工作区,如上例,D:repo1目录即为工作区【不包含.git目录】
所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制。
暂存区也在 .git 目录内,工作区的文件进入仓库时,要先进入暂存区。
版本控制,简单说,就是记录文件的诸多版本,分支就是这些版本的最终记录位置。
执行 git status 可以看到工作区中文件的状态
6.2 暂存文件
执行 git add . 将工作区中的文件全部存入暂存区
将工作区中的文件存入暂存区 |

 |
6.3 提交文件
执行 git commit -m “这里写提交的描述信息” 作用是将暂存区的文件存入分支,形成一个版本
提交文件,形成一个版本 |
 |
6.4 撤销已经add的文件[了解]
有一个文件,已经执行了git add 提交到暂存区,此时可以使用命令撤销

git restore --staged 文件名
6.5 撤销已经commit的文件[了解]
文件已经commit也可以回退,这种回退叫版本回退,两种方案
git reset HEAD^
git reset HEAD^^
git reset HEAD~
git reset HEAD~2
git reset db65e3c98e7e1f25887ebe66d50cd9120aea2ca0
git reset --mixed HEAD~
git reset --soft HEAD~
git reset --hard HEAD~
git revert head 撤销最近一次的提交
git revert head~ 撤销上一次的提交
git revert 735fd(版本号)
git revert 这个命令执行后,会进入一个编辑器,让写撤销日志
按键盘 i ,进入编辑状态
写完,按esc
再按 :wq ,意思是保存并退出
6.6 revert和reset的区别[了解]
-
Git revert:Git revert命令用于撤销之前的提交,但是通过创建一个新的提交来反转先前的提交,而不改变Git仓库的历史记录。也就是说,它会创建一个新的提交,将先前提交的更改全部撤销掉。这个新的提交会包含对旧提交的撤销操作,因此历史记录中会保留撤销了的更改。
使用Git revert时,需要指定要撤销的提交的引用或提交哈希值。Git会自动生成一个新的提交,该提交的更改与撤销的提交相反。因此,Git revert是一种安全的方法来撤销错误的提交,并保留所有的修改历史记录。
-
Git reset:Git reset命令用于将HEAD指针和当前分支的指针重置到指定的提交,从而改变Git仓库的历史记录。它可以用于撤销提交、删除提交、合并分支等操作。
Git reset有三个主要的模式:–soft、–mixed(默认)和–hard。–soft模式将HEAD指针和分支指针重置到指定提交,但不修改工作目录和暂存区,可以用来撤销最后的提交。–mixed模式不仅重置HEAD和分支指针,还重置了暂存区,但不改变工作目录的文件内容。–hard模式是最彻底的,它会丢弃所有未提交的更改,包括暂存区和工作目录的修改。
使用Git reset时,需要指定要回退到的提交的引用或提交哈希值。根据使用的模式不同,Git会将HEAD和分支指针移动到指定提交,并可能修改暂存区和工作目录。
总结起来,Git revert是通过创建一个新的撤销提交来撤销之前的提交,保留历史记录;而Git reset是通过改变HEAD和分支指针的位置来修改历史记录,可能会删除或修改提交。选择使用哪个命令,取决于你需要保留历史记录还是改变历史记录,并且是否需要保留之前提交的更改
。
七、分支[重点]
7.1 分支简介
分支由多个提交点组成,分支上会有一个指针,默认总是指向最新的提交点 |
 |
7.2 分支操作
7.2.1 查看分支
7.2.2 创建分支
7.2.3 切换分支
7.3 新建分支细节
新建分支时,新分支,默认有哪些内容?分支中包含了哪些次提交?
新分支,默认有哪些内容?新分支拥有之前分支的全部内容
7.3.1 新分支初始内容
每个分支都有一个指针,新建一个分支,首先是新建一个指针。
而且新分支的指针会和当前分支指向同一个提交点。
新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。(内容一样)
每个分支都有一个指针,新建一个分支,首先是新建一个指针 |
 |
7.3.2 多分支走向
在master分支和新分支,分别进行 git add 和 git commit
分支情况如下图:
7.3.3 分支提交日志
查看分支的提交日志,进而看到分支中提交点的详细情况。
git log --oneline --graph
查看当前分支的提交日志 |
 |
7.4 分支合并
两个分支内容的合并
git merge 分支a 合并分支a
三方合并,将2 和3 的更改都累加在1 上,形成新的提交点 |
 |
两个分支进行合并,但它们含有对同一个文件的修改
,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。
场景模拟如下:
在master分支 合并 dev分支
此时,打开hig.txt 文件:
出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:
- 保留某一方的,删除另一方的
- 保留双方的
- 但无论如何,要记得删除 <<<< ==== >>>> 这些
- 本质是两人协商为冲突的内容,定制出合理的内容。
- 修改完,继续git add /git commit
根据协商,再次编辑文件 |
 |
提交 再次编辑后的文件 |
 |
每次commit都会在分支上形成新的提交点,通过日志可以看到提交的信息
git log

也可以以图形的形式查看提交树
git log —oneline —graph

第5章中的仓库,其实是本地仓库。
当多人协同开发时,每人都在自己的本地仓库维护版本。
但很重要的一点是,多人之间需要共享代码、合并代码,此时就需要一个远程仓库。
8.2 远程仓库选型
每个开发人员,在面对远程仓库时,会面临的一些基本操作。
在 码云 注册账号,并登录。
进入公司后,很可能会使用公司自己搭建的git服务器,则账号向领导索要即可
1> 查看秘钥(ssh key)
cat ~/.ssh/id_rsa.pub
2> 创建SSH Key
ssh–keygen -t rsa -C “youremail@example.com”
ssh–keygen -t rsa -C “237876779@qq.com”

直接回车不要输入123456密码.直接按4次回车
即可.不输密码
如果一切顺利的话,可以在用户主目录
里找到.ssh
目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

3>登录github或者gitee,进入设置-SSH公钥,文本框里填入公钥id_rsa.pub文件的内容

为什么GitHub或Gitee需要SSH Key呢?因为它们需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub/Gitee只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub/Gitee允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
8.3.2 新建远程仓库
创建远程私有仓库-02 |
 |
创建远程私有仓库-03 |
 |
8.3.3 本地关联远程仓库
本文档中选用仓库的 https协议的地址,将此地址关联到本地git中
8.3.4 推送文件到远程仓库
将本地仓库中已经commit的内容push到远程仓库,以共享自己的代码。
git push -u origin "master"
输入凭证,如此码云才能接受此次上传的内容 |
 |
8.3.5 克隆远程仓库
如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过 git clone 将其复制到本地。
多人协同开发时,写好代码的git push 上传到远程仓库;需要代码的 git pull 拉取代码即可。
有人再次将本地仓库内容,上传到了远程仓库 |
 |
【重点】每次想要往远程push代码,一定要先git pull,因为有可能远程代码已经更新,而你本地代码没有远程代码同步,此时直接push会拒绝!所以一定要先git pull拉取远程最新代码,与本地代码合并,合并后再执行git push推送到远程
8.3.7 拉取&推送远程的其他分支
git pull origin dev
git push origin master:dev
8.3.8 命令汇总

九、Idea关联Git
9.1 关联Git
File > Settings 关联过程是自动的
此处关联是Idea可以自动完成的 |
 |
# 所有class,后缀的文件
*.class
# 所有jar后缀的文件
*.jar
*.iml
*.war
# .idea文件夹
.idea
# out文件夹
out
target
9.3 提交-commit
创建好仓库后,做第一次提交。
新建开发分支
新建分支 |
 |
查看当前分支 |
 |
在其他分支修改并push到远程 |
  |
9.5 上传到远程仓库(push)
-
请首先参照第8章,创建一个远程仓库。
-
要求是裸库,且建议库名和项目名同名。
执行,push操作 |
 |
如果有建好的远程仓库,比如公司内已经在用的仓库,或者github,码云上的一些公开仓库,
可以将远程仓库的项目复制到本地使用。
输入如远程仓库地址 |
 |
打开项目 |
 |
9.7 更新本地项目
如果远程仓库有更新,则你的本地项目也需要一起更新。
合并分支时,如果出现冲突,则需要解决冲突。
9.9 撤销修改[了解]
9.9.1 未commit时
还没有add文件时,可以直接删除要删除或修改的文件,因为此时还没有经过仓库管理
如果已经add,但是还没有commit,此时只是在暂存区


9.9.2 已commit时
如果已经提交,先显示历史记录


选中要退回到的提交点,右键拷贝版本id

然后关闭窗口,重新操作git–> reset HEAD


ps: reset type 与版本回退章节中命令意思一致
用于将当前分支未提交的修改(工作区的修改和暂存区的修改)先暂时缓存起来。
适用于正在一个分支进行开发,但是需要切换到另一个分支进行bug处理,但是又不想提交当前分支代码的情况。
比如在B分支进行了修改,现在需要切换到A分支。
1)在B分支上执行stash,B分支的代码会恢复到修改前状态


2)切换到A分支,修改代码并提交
3)切回到B分支,恢复之前的代码,继续开发


十、多人协同开发
多人开发协同,git操作
1> 由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名
2> 管理员会在idea中创建一个初始项目,其中包含.gitignore文件。 并在项目根目录下 建立本地库。并建立 dev分支。
3> 管理员将本地库上传到远程库
4> 将其他开发人员拉入远程库的 开发成员列表中 ,使得其他开发人员可以访问该远程库。
流程如下:
5> master分支设置为 protected分支,只有管理员有权限将代码合并到其中。dev分支设置为 常规分支所有开发人员 都可以在其中合并代码
进入分支设置 |
 |
设置保护分支,让master分支不能被随更改 |
 |
-
1初始化:在idea中clone 远程库,获得项目。会建立本地库
-
2后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit 提交到本地的dev分支中,然后 上传(push)到远程dev分支中。
-
3需要更新项目内容时,通过 pull 从远程仓库拉取内容。
-
4注意:多人协同时,每次在 push 到远程库前,都先做一次pull,一来是把远程最新内容合并到本地,二来是核实本地内容是否和远程内容有冲突。
-
5后续的开发,会接到一个个的功能任务,往复操作 2>、3>、4> 而已。
10.3 实战
方式1
- 组长创建远程仓库
- 把组员设置为开发者
- 把远程仓库克隆到本地,然后使用 idea 打开
- 团队开发 每个人创建一个自己的类
方式2
1.组长使用idea创建工程, 把工程分享到远程仓库
2.在远程仓库 邀请组员为开发者
3.组员使用idea 拉取远程仓库的工程
4.团队开发 每个人创建一个 自己的类
在使用https协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错
解决方案: 控制面板 》 凭据管理器 》 删除对应凭证,再次使用时会提示重新输入密码。
删除之前的码云凭证,然后重新push即可 |
 |
推送时报错,提示private email address

解决方案,gitee设置邮箱为公开的

方式2
1.组长使用idea创建工程, 把工程分享到远程仓库
2.在远程仓库 邀请组员为开发者
3.组员使用idea 拉取远程仓库的工程
4.团队开发 每个人创建一个 自己的类
十一、经典BUG问题
在使用https协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错
解决方案: 控制面板 》 凭据管理器 》 删除对应凭证,再次使用时会提示重新输入密码。
删除之前的码云凭证,然后重新push即可 |
 |
2 推送时邮箱问题
推送时报错,提示private email address
[外链图片转存中…(img-rSMcGvp3-1701251053641)]
解决方案,gitee设置邮箱为公开的
[外链图片转存中…(img-IZa4gX7F-1701251053642)]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。