廖老师Git教程学习总结


前言

这几天学习了一下廖雪峰老师的git教程,为了总结和方便日后回顾,故写了如下的文章来大概总结一下git使用的知识点。


一、Git 简介

1.Git 介绍

Git是目前世界上最先进的分布式版本控制系统
能自动记录每次文件的改动,还可以让同事协作编辑。

集中式版本控制系统:版本库集中存放在中央服务器,干活时,先从中央服务器取得最新版本,干完活再推送给中央服务器。
缺点:必须联网,若在互联网遇到网速慢,可能提交一个10M的文件就需要5分钟,过于缓慢。

分布式版本控制系统:无中央服务器,每个人的电脑都是一个完整的版本库,工作时无需联网,因为版本库就在你自己的电脑上。只需推送各自的修改给对方。

工作区、版本库、暂存区概念:
工作区
在开发一个项目时,主目录就是工作区。
版本库(仓库)
工作区中有一个隐藏目录.git,这个就是git的版本库了。
暂存区
Git的版本库里存了很多文件,其中包括称为Stage或index的暂存区,还有一个git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD。
在这里插入图片描述

2.版本库(仓库)

创建版本库
1创建版本库
(1)创建空目录并进入mkdir、cd
(2)把这个目录变成Git可以管理的仓库git init

2添加文件到git仓库
1.使用命令git add < file >,注意,可反复多次使用,添加多个文件;把文件修改添加到暂存区
2.使用命令git commit -m < message >,完成。把暂存区的所有内容提交到当前分支master

二、时光机穿梭

1.介绍

原理:
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

┌────┐
│HEAD│
└────┘

└──> ○ append GPL

○ add distributed

○ wrote a readme file
改为指向add distributed:

┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

○ wrote a readme file
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

1使用git status命令掌握工作区的状态。
2如果有被修改过用git diff xxx查看修改内容。

2.版本回退

1.HEAD指向的版本是当前版本,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id,上一个版本可以用HEAD ^,上上一个版本就是HEAD ^^。
2.穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本,若嫌输出信息太乱,可以试试加上–pretty=oneline。
3.要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3.撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout - - file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD < file >,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,前提是没有推送到远程库。

4.删除文件

1.手动删除文件后要从版本库中删除该文件,用命令git rm删掉,并且git commit。
2.误删,从版本库恢复到最新版本$ git checkout - - test.txt

但从来没有被添加到版本库就被删除的文件,是无法恢复的!

三、远程仓库

1.添加远程库

1.关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
2.关联后,使用命令git push -u origin master第一次推送master分支的所有内容;-u 把本地的master分支和远程的master分支关联起来,以后可以简化命令
3.此后,每次本地提交后,就可使用命令git push origin master推送最新修改;
4.如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm < name >命令,建议先用git remote -v查看远程库信息。(解除了本地和远程的绑定关系,并不是物理上删除)

2从远程库克隆

1.必须知道仓库的地址,一般是git://(ssh最快)
2.使用git clone命令克隆。

四、分支管理

1.介绍

分支在实际中的作用?
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

2.创建与合并分支

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
在这里插入图片描述

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
在这里插入图片描述

新提交一次后,dev指针往前移动一步,而master指针不变
在这里插入图片描述
把dev合并到master上直接把master指向dev的当前提交在这里插入图片描述
删除dev分支完成提交
在这里插入图片描述

3.解决冲突

1.$ git merge xxx当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
2.解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
3.用git log --graph命令可以看到分支合并图。

4.分支管理策略

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
在这里插入图片描述

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
在这里插入图片描述

5.Bug分支

1.修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

2.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

3.在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick < commit >命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

6.多人协作

查看远程库信息,使用git remote -v;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin < branch-name >推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to < branch-name > origin/< branch-name >
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin < branch-name >推送就能成功!

哪些分支需要推送,哪些不需要?
1.master分支是主分支,因此要时刻与远程同步;
2.dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
3.bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
4.feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

7.Rebase

可以把本地未push的分叉提交历史整理成直线
原理还没弄明白

五、标签管理

1.tag是一个让人容易记住的有意义的名字,它跟某个commit绑在一起,如v1.0
2.tag可以通过历史提交的commit id打在commit上,还可以创建带有说明的tag
3.可以删除,可以推送至远程

六、其他特殊功能

1.忽略特殊文件
忽略某些文件时,需要编写.gitignore

2.配置别名,搭建git服务器,SourceTree等熟练git后再用


总结

以上是对廖雪峰老师的git教程的简单总结,若需要详细学习请详见廖老师课程或官方文档。有兴趣的也可以看看我根据廖老师教程做的代码笔记。

链接: Git教程-廖雪峰的官方网站.
链接: Git官方网站.
链接: 我的代码笔记.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值