Git入门

Git简介

"""
Git是由Linus花了两周时间用C写的一个分布式版本的控制系统
"""

集中式vs分布式

"""
集中式(SVN和CVS...):都需要联网,都有中央服务器,中央服务器就好比一个图书馆,你要改一本书,就必须先从图书馆借出来,然后回家自己改,改完之后再放回图书馆

分布式(git):不需要联网,具有及其强大的分制管理,每个人的电脑都有一个完整的版本库

集中式和分布式的区别是:
你的本地是否有完整的版本库历史!
假设SVN服务器没了,那你丢掉了所有历史信息,因为你的本地只有当前版本以及部分历史信息。
假设GitHub服务器没了,你不会丢掉任何git历史信息,因为你的本地有完整的版本库信息。你可以把本地的git库重新上传到另外的git服务商。
"""
"""
分布式的版本控系统如果要在多个人之间协作不也是需要一个像github一样的的远程版本库吗,这与集中式的有什么区别呢?

比特币的区块链设计就类似git,人手一份全账本,只是用p2p全网同步,而git通常搞个中心化服务来同步
svn像银行,完整账本只有银行有,作为终端节点可以向银行查询账本,但如果某一天银行没了,整个完整账本就没了
分布式的核心设计是同步,而不是主从
"""

创建版本库

打开Git命令行输入以下命令:
git config --global user.name "填写自己的用户名"               # 配置个人用户名
git config --global user.email 填写自己的邮箱号                #电子邮件地址

# 初始化仓库的步骤
$ mkdir learngit  # 创建一个空的
$ cd learngit     # 切换到该文件夹
$ git init     # 把这个目录变成Git可以管理的仓库

# 把创建的文件放在learngit文件夹中(就是放在Git仓库中),Git再牛逼你不放在他的仓库中,想要从仓库中找到该文件也是不现实的

# 添加文件到Git仓库,分两步:
$ git add file1.txt
$ git commit -m "add file."
"""
把文件添加到仓库:使用命令git add <file>,注意,可反复多次使用,添加多个文件;
把文件提交到仓库:使用命令git commit -m <message>,完成。(-m后面是本次提交的说明,最好是有意义的,方便以后查找,不添加也可以,建议还是添加上)
"""
$ git status  # 可以让我们时刻掌握仓库当前的状态
$ git diff readme.txt  # 可以告诉我们修改的信息

*****************************************************************
# 如果修改文件信息之后,需要重新上传到仓库,就要执行两条命令
$ git add <file>
$ git commit -m 'message'  # 此时的message信息最好是修改的信息的简介
*****************************************************************

版本回退

"""
Git在你每次commit之后就会保存一下数据,方便之后因为误删或者想知道之前的数据都可以回退之前的版本,版本之前的回退是基于指针的,所以版本之前的切换速度是非常快的。

总结:Git的这种功能极大地方便了我们进行数据的操作,这种功能类似于我们打通关游戏保存的档案,
这一关通不过提前保存档案,回头还可以再次闯这关,而不是重新开始。
"""
$ git log  # 查看版本日志
$ git log --pretty=oneline  # 一行一行显示 方便我们查看

# 版本回退用git reset命令,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上1000个版本写1000个^比较容易数不过来,所以写成HEAD~1000。
$ git reset --hard HEAD^
# 注意:还原之后上一个版本就看不到了

# 当然还是有办法找到的,通过下列命令:
$ git reset --hard 版本号   # 版本号一般写前五位就好(版本号是通过SHA1计算出来的,而不是用序列号标注,这样做的好处是:不会有重复的)

# 问题是我们要是不知道版本号可咋办?或是过去几个月之后想要之前的数据,数据都被自己会退掉了,版本号早忘开了咋办??
"""
不用担心,在Git中,总是有后悔药可以吃的。
Git提供了一个命令git reflog用来记录你的每一次命令,用来查看命令历史,以便确定要回到哪个版本。
"""

工作区和暂存区

"""
工作区:就是当前仓库的文件夹就是一个工作区

暂存区:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
"""

管理修改

"""
举例:对于仓库中的一个readme.txt文件,先对readme.txt进行修改之后,git add添加到缓存区,这是如果在对readme.txt进行修改,然后git commit添加到仓库,你会发现第二洗修改没有被提交,这时不要急,再次执行那两条命令就可以了,还可以跟随下一次缓存区的内容一块提交到仓库。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:
"""

撤销修改

"""
场景1:当你改乱了工作区某个文件的内容,用命令git checkout -- file,返回到修改之前

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

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

补充:stupid boss提交推送到远程版本库
"""

删除文件

"""
第一种情况:
rm <file>删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- <file>
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
第二种情况:
命令git rm <file>用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
"""
posted @ 2022-01-31 13:56  程序员少帅  阅读(45)  评论(0)    收藏  举报