前言
虽说大家应该都会用git来进行版本控制以及云端备份,但是如果是合作开发次数较少的情况下,我们可能会对分支冲突等这些情况不知道怎么去处理,下面我们来一步步梳理一下。
Git中的抽象概念
首先git把本地仓库称为暂存区,也就是提交文件的快照至暂存区,必要时可以返回某个快照,也就起到了版本控制的作用。
git init
首先是初始化一个本地仓库
|
|
这个init命令会在本地创建一个隐藏的.git文件,其中就包含了一些重要的数据来维护本地仓库,我们不应该修改这个文件里面的内容,以免造成文件损坏。
git status
在创建好本地仓库后,我们来新建一个文件试试
|
|
然后随便往这个里面写一些东西
|
|
此时,如果我们想要对mass.txt进行版本控制,就需要把这个文件添加到追踪记录里面。我们先来看看当前是否有未进行提交的文件呢
|
|
然后git给了我们这些提示信息
|
|
它提示我们有一个未追踪的文件,也就是说,你必须告诉git,让它追踪这个文件,否则将无法对mass.txt进行版本控制。
git add
我们可以将先要追踪的文件或文件夹列在这个命令后
|
|
添加mass.txt
|
|
然后这是git的提示信息
|
|
它告诉我们,我们已经要追踪mass.txt了,它还提示我们,如果不想追踪这个文件,可以使用
|
|
这个命令是很有用的,因为有的时候你不小心追踪了一个配置信息文件,而这个配置文件实际上没有必要存储在云端,所以你可以使用这个命令去除你追踪过的某个文件。
当然,你还可以把所有不需要追踪的文件全部写入一个.gitignore中,这是一个文本形式的文件,这样在git status的时候,git就会忽略他们。
git commit
当你觉得我目前所有的工作做完后,功能也实现的差不多了,你就可以使用git commit来把这些文件加入暂存区。
|
|
-m是指message的信息,这也是你对当前工作的一个快速总结,当你不小心搞砸后,你就可以回到你的这次commit。
当然,也可以不指定任何参数
|
|
这样会弹出一个vim的标签,如果需要更多的提交信息,那么就可以使用这个页面。
git checkout
每次我们使用git commit进行提交后,就会对应生成多个哈希信息,如果我们希望回到某个版本,就可以使用git checkout回到对应的版本,我们可以使用git log来查看本地仓库的所有提交记录
|
|
在commit之后还有一个哈希值,我们在checkout后指定对应的哈希值就可以切换到对应的版本
|
|
然后会得到下面的提示
|
|
意思就是说HEAD指针不在最新的提交上,也就是分离头指针。我们现在来看看mass文件里面有什么
结果符合我们的预期,什么都没有。
合并冲突
冲突一般出现在多人合作中,尤其是对同一个功能的实现,在合作的时候,当我们把一项任务完成后,需要向远端同步
|
|
假设我们同步到远程的main分支,此时,如果提交,可能会触发拒绝提交的提示。这是因为你的本地分支可能落后远程分支,也就是说,在你之前,已经有人更新过远程分支了,为了防止文件内容的丢失,于是git就拒绝了你的提交,此时你需要先于远程分支进行同步
|
|
其实pull是git fetch和git merge的合并命令,说的有些抽象,我们来画个图展示一下。
这是我们的远程仓库
本地获取远程仓库后,又做了几次commit
注意,此时我们本地仓库的分支最新是commit5,而远程的最新分支是在commit3上。
此时,如果有人在你之前就修改了远程分支,假设变成了这样
也就是说,远程仓库的commit4和commit5都是你所没有的,即你本地仓库的远程分支和远程仓库的分支是落后的。
而git pull做的就是先从远程分支进行拉去,然后尝试合并,也就是完成了git fetch和git merge这两个命令
此时,分支冲突就可能会产生,这个时候就需要我们去手动处理可能出现分支冲突的内容。
总结
学会这些命令后,基本上就可以达到实验中对我们的要求了,更多命令和技巧,可以在以后慢慢学哦!