Git使用心得

本文首先感谢孟宁老师的教导

主要参考文献为软件学院孟宁老师所写的一篇文章,文章地址:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg

Git使用心得

版本控制系统大致分为两大类,一类是中心版本控制系统,比如 Concurrent Versions System(简称 CVS)和 Subversion(简称 SVN);

另一类就是分布式版本控制系统,比如我们即将重点介绍的 Git,是目前世界上最先进的分布式版本控制系统。

在我看来,分布式版本控制系统有两大优点:1.去中心化,即分布式版本控制系统没有中央服务器,不用必须联网工作

                    2.安全性能高,CVS若中央服务器出现故障,则所有人都无法工作,而分布式的话,每个人都有完整的版本库。

GIt的安装教程:https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496

Git的使用可以使用VSCode提供的可视化界面进行操作,也可使用命令行,本文接下来的操作都是基于命令行的操作

场景一:Git 本地版本库的基本用法

git init的用法

1.Git本地版本库的使用首先需要我们在本地创建一个空目录用作仓库。(我创建好一个名叫GitRepository的空目录)

2.我们需要将该空目录变为Git可以管理的仓库,git init 初始化一个本地版本库

3.因为git为分布式系统,我们需自报家门,要设置自身id与email

.git文件与Git的工作分区

 1.我们可以看到该目录下多了名为.git的文件夹。

  .git文件夹内文件作用:https://blog.csdn.net/u010331406/article/details/49128607?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-                                    1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

2.Git工作区、暂存区、版本库的区别

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

 

 

 

 

 

 文件添加到版本库

1.在工作区创建一个文件test.txt

 

 

 2.通过git add FileName命令将指定文件添加到暂存区

3.通过git commit -m “message”命令将暂存区所有文件添加到版本库内(message为你要添加的备注信息,方便日后查看)

 

 

 回到过去

我们修改test.txt文件内容重新提交到版本库后

 

 

 1.通过git log命令查看提交记录

 

 

 2.通过git reset —hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 命令回到过去的版本

回到未来

当我们回到过去后发现,未来的某个存档有意义,我们想回到未来

1.通过git reflog命令查看未来的存档

 

 

 2.通过git reset —hard commit-id/commit-id的头几个字符 命令回到未来

 

 

场景二:Git 远程版本库的基本用法

我们在GitHub上新建一个版本库名为GRtest,内包含一个文件test.txt

1.我们通过git clone URL命令将远程GitHub上的版本库复制到本地

 

 

 2.git pull指令可以将GitHub上的更新同步到本地库

3.git push指令可以将本地库的变化同步到GitHub上,需输入GitHub的用户名和密码

场景三:团队项目中的分叉合并

用户的每次提交,Git都会将它们串成一条时间线,在Git中,master分支为主分支,上面存放的都是比较稳定的版本,其他分支是较为不稳定的分支,主要用于测试特性

开发者开发时,一般在单独的分支上进行开发,最终将该分支合并到master主分支上。

合并默认为快进式合并,这种方式会将不稳定分支上的零碎的版本混入主分支,造成主分支混乱,因此我们合并分支,一般通过--no-ff参数关闭“快进式合并”,这样只会讲不稳定分支最后的结果合并入主分支,这样可以降低主分支的冗余性。

1.git branch 分支名 创建一个分支(git branch可以查看所有分支状态,分支前有*表示当前处于该分支)

2.git checkout 分支名 转换到当前分支环境中(git checkout -b 分支名是1.2两条命令的合集,创建一个分支并转移到该新的分支)

 

 

3.在分支上的操作与提交是不会影响到主分支的

主分支与别的分支合并需转换到主分支的环境下通过命令merge branch --no-ff 分支名称 进行合并(建议关闭快进式合并)

4.git brance -d 分支名 删除分支

场景四:Git Rebase

rebase的黄金法则:绝对不要在公共分支上使用rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;

  • rebase操作也可压缩一些无用提交
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase(译注:rebase 的翻译暂定为“衍合”,大家知道就可以了。)

最容易的整合分支的方法是 merge 命令,它会把两个分支最新的快照(C3 和 C4)以及二者最新的共同祖先(C2)进行三方合并,合并的结果是产生一个新的提交对象(C5)

还有另外一个选择:你可以把在 C3 里产生的变化补丁在 C4 的基础上重新打一遍。在 Git 里,这种操作叫做衍合(rebase)。有了 rebase 命令,就可以把在一个分支里提交的改变移到另一个分支里重放一遍。

它的原理是回到两个分支最近的共同祖先,根据当前分支(也就是要进行衍合的分支 experiment)后续的历次提交对象(这里只有一个 C3),生成一系列文件补丁,然后以基底分支(也就是主干分支master)最后一个提交对象(C4)为新的出发点,逐个应用之前准备好的补丁文件,最后会生成一个新的合并提交对象(C3'),从而改写 experiment 的提交历史,使它成为 master 分支的直接下游

用法一:合并日志

1.通过git rebase -i HEAD^^^向前查看三个版本

2.进入命令行文本编辑器,我们选择将d合并

 

 

3.我们可以看到d的log被合并了

 

 

 

用法二:合并分叉

 

我们构建一个如图所示的分叉结构

 

 

 merge,rebase的结构分别如图所示,我们分别新建两个分叉,采用两种合并方式查看不同。

merge 的log结构

 

 

 rebase的log结构

 

 

场景五:Fork + Pull request

 1.我们fork别人的一个库到我们自己的账户

 

 

 2.我们在本地修改完之后,回传回GitHub

 

 

 3.点击fork仓库中的pull request,我们可以看到修改

 

 

 4.通过create pull request按钮上传成功

 

posted @ 2020-10-05 20:49  少年纵马当长歌  阅读(125)  评论(0编辑  收藏  举报