文章目录
Git
Git相关概念
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
版本控制的分布式和集中式的区别:CVS及SVN这些集中式的版本控制系统,而Git是分布式版本控制系统
-
集中式版本控制系统
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆
集中式的缺点:集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给远程仓库。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
三个区域的概念
git的工作总共分四层,其中三层是在自己本地也就是说git仓库,包括了工作目录、暂存区和本地仓库
- 工作区(workspace):就是你在电脑里能看到的目录。
- **暂存区(index):**一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- **版本库(repository):**工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
-
**远程仓库(remote)**在中心服务器,也就是我们做好工作之后推送到远程仓库,或者从远程仓库更新下来最新代码到本地。
Git所存储的都是一系列的文件快照,然后git 来跟踪这些文件快照,发现哪个文件快照有变化他就会提示你需要添加到暂存区或是提交到本地仓库来保证你的工作目录是干净的
仓库
仓库是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下
节点
git使用提交(commit)之后就会生成一个节点,之前的节点成为这个节点的父节点
分支
为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响
SourceTree
SourceTree的概念
SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mn版本控制系统工具。支持创建、克隆、提交、push、pull 和合并等操作。
SourceTree拥有一个精美简洁的界面,大大简化了开发者与代码库之间的Git操作方式,这对于那些不熟悉Git命令的开发者来说非常实用。
SourceTree拥有完整的Git功能:
-
通过一个简单的用户界面即可使用所有的Git命令
-
通过一次单击,即可管理所有的Git库,无论是托管的还是本地的
-
通过一次单击,即可进行commit、push、pull、merge等操作
-
一些先进的功能,如补丁处理、rebase、shelve、cherry picking等
-
可以连接到你托管在Bitbucket、Stash、Microsoft TFS或GitHub中的代码库
仓库相关操作
创建本地仓库
打开本地仓库
克隆远程仓库
关联远程仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6h9eMoY-1649647287871)(https://gitee.com/FriedRicenoodles/pictures/raw/master/SourceTree/%E5%85%B3%E8%81%94%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%932.png)]
获取
获取(fetch)从远程仓库获取最新版本到本地版本库 不会自动合并(merge)到工作空间
节点相关操作
提交
提交(commit)将工作空间修改提交到本地库
重置
重置(reset)主要用于将改动提交(commit)到本地而未推送(push)到远程仓库时,
reset
是用来重置本地仓库的commit
命令
-
软合并:保存改动文件,将改动文件回退到暂存区,也就是
git add
之后的状态 -
混合合并:保存改动文件,将改动文件回退到未暂存状态,也就是
git add
之前的状态 -
强行合并:丢弃改动文件,强制回退到指定版本
回滚提交
回滚(revert)主要用于已经
push
到远程仓库时,revert
后会新增加一个commit
,commit
的内容是之前提交内容的反操作,就像你修改内容提交一样,远程仓库认为这是一个新的提交,从而应用到远程分支上
回滚后执行
push
即可将远程仓库回滚指定的提交
参考链接 https://blog.csdn.net/crj252196873/article/details/113641883
分支相关操作
新建分支
合并分支
future
分支为主分支master
的工作副本,当future
分支完成作业后使用合并(merge)可以合并多个提交到master
删除分支
当分支有新的提交没有被合并到其他分支删除时将提示错误,只能用强制删除
切换分支
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
制造冲突
当我们同时在两个不同分支修改同一文件提交后,将两个分支合并时将发生冲突
-
将
master
分支的README.md
中第一行修改为masterchange
-
将
future
分支的README.md
中第一行修改为futurechange
-
将
future
分支合并到master
分支
当我们多人工作时其他人修改了远程仓库的某个文件,我们也修改了该文件推送时就会发生冲突
- 当远程仓库的
master
分支的README.md
中第一行被修改为1111
- 将本地仓库的
master
分支的README.md
中第一行修改为2222
并提交 - 此时我们先获取远程仓库是否有更新
- 将更新合并到
master
分支时就会发生冲突
解决冲突
选中发生冲突的文件,点击
操作
->解决冲突
选择解决方式即可
拉取
拉取
pull
从远程拉取最新版本到本地并自动合并merge
,相当于fetch
+merge
推送
推送
push
将本地库修改提交到远程库
其他
书写忽略文件
在使用git时经常会遇到项目中的一些文件不需要跟踪,可以使用以下两种方法忽略不需要跟踪的文件
在
.gitignore.txt
中书写忽略文件如*.obj
或者obj/
,在提交时忽略.obj文件和obj目录
在未跟踪的文件右击选中忽略
已跟踪文件不可被忽略,需要先停止跟踪
停止跟踪
停止跟踪远程分支后,该分支所有修改只会提示提交到本地仓库而不会提示推送到远程仓库
如果某个文件修改后不想提交到本地库又想保持工作区的整洁,我们可以选中该文件右击选中停止跟踪后,该文件任何修改都不再提示需要提交
创建补丁
菜单栏
操作
->创建补丁
,选择要创建的节点补丁确认即可,也可直接选中节点右击在快捷菜单中点击创建补丁
- 本地仓库有
master
和develop
分支,两个分支中都有文件1.txt
,将develop
分支中1.txt
中第一行添加1111
并提交
- 在版本库中选中该提交节点创建补丁
应用补丁
菜单栏
操作
->应用补丁
,将某次提交节点修改记录打包成补丁,应用该补丁可以还原该次提交
- 切换回
master
分支,主菜单操作
->应用补丁
将我们刚才生成的补丁添加
- 此时我们可以看到
master
分支的1.txt
中应用了补丁的提交记录
- 此时我们将
master
分支重置到未应用补丁时修改1.txt
第一行添加2222
并提交
- 此时我们修改了
1.txt
,补丁中的提交记录也是修改’1.txt’,我们再次应用该补丁将会发生冲突
- 解决下冲突即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaisrrda-1649647287883)(https://gitee.com/FriedRicenoodles/pictures/raw/master/SourceTree/%E8%A1%A5%E4%B8%817.png)]
贮藏
当在当前分支做了一些修改,突然需要切换到另一个分支去做其他一些紧急的事情,但是既不想提交这些修改,也不想将这些修改带到别的分支,此时可以选择贮藏功能
贮藏后在左下角可以看到贮藏的副本,可以恢复到你当前的工作副本
丢弃
丢弃就是放弃你之前这个文件的所有修改,相当是一键还原到初始状态
移除
移除是直接删除本地文件的
创建标签
创建标签后在左下角可以看到创建好的标签,点击后可以快速跳转到标注的节点,便于我们日常开发记录
删除标签
最终
移除是直接删除本地文件的
创建标签
[外链图片转存中…(img-A0tjMItZ-1649647287884)]
创建标签后在左下角可以看到创建好的标签,点击后可以快速跳转到标注的节点,便于我们日常开发记录
删除标签
[外链图片转存中…(img-dgsYvyXI-1649647287885)]