Git学习笔记(一)

注:该笔记完全是个人在学习《廖雪峰的git教程》中自己总结的笔记,其中肯定会有不少错误,请读者朋友们斧正,感谢!!
廖旭峰的官网:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Git版本控制:

本质:对仓库中的文件阶段性修改的记录(即版本库)
----------若在仓库中创建一个空目录时,git是不能察觉他的存在的

svn与git:

一般:

svn 集中式的版本控制系统,有一个中央服务器,有网才能工作
git 分布式的版本控制系统,任何一个节点都可以当作中央服务器,断网也可以工作

反思:

开始以为svn真的只有在有网的情况下才能工作,但是很多人说断网也可以工作,不能人云亦云,大量查看评论

总结:

所谓的svn只能在有网的情况下可以工作,不是说不能进行开发,修改文件操作,而是指不能提交版本操作(即只有中央服务器维护一套版本库),其他节点主机只能向中央服务器提出commit请求,由中央服务器来执行。而git是每个节点主机都拥有一个完整的版本库,可以在本地断网的情况下随意commit,所有的历史版本都会记录在本地,最后使用push向远程服务器提交自己的文件及版本库

svn与git的区别:

svn:必须有中央服务器 (记录版本库)
git:可以没有中央服务器(本地维护版本库,中央服务器只是用来方便交流)
所谓不能工作,特指版本提交:
=====================================================

GIt使用

注:该笔记不太适合完全的小白,是自己学习的一个记录;若想从0开始建议移步《廖雪峰的git教程》
(所有操作均在linux下进行)

1.安装git:
  sudo apt-get install git    (ubuntu)
  yum install git      (redhat/centos)

2.配置git:

git config --global user.name 'yourname'
git config --global user.email '[email protected]' 
--global 表示全局设置,这台主机的所有git仓库都使用该配置

3.git仓库初尝试:

mkdir learngit
cd learngit
git init
vi  a.txt
git add a.txt
git commit -m 'add a new file a.txt'

创建了一个learngit目录,将该目录初始化为了git仓库(repository),并添加了一个a.txt并提交到了版本库中

图解:

【版本一:】


Git学习笔记(一)_第1张图片
gitModel.png

【版本二:修正版】


Git学习笔记(一)_第2张图片
git_2.png
git init                  (将learngit初始化为git仓库)
git add a.txt              (将工作区中的a.txt添加到暂存区中)
git commit -m 'add a.txt'  (将暂存区中的a.txt提交到版本库)
git reset HEAD a.txt       (将暂存区中的a.txt清除)
git checkout -- a.txt      (将工作区中的a.txt回退)
git diff a.txt             (对比工作区与缓存区中的a.txt)
git diff --cached a.txt    (对比暂存区与版本库中的a.txt)
git diff HEAD -- a.txt     (对比工作区与版本库中的a.txt)
git status                 (查看整个仓库的状态)
git log                    (查看版本的信息)
git log --pretty=oneline   (单行显示版本库)
gti reset --hard (切换到具体的提交commit)
git reflog                 (查看git命令记录)

==============================================

要点:

1.在Git中,用HEAD表示当前版本,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

=============================================

FAQ:将廖大的官网中网友们的一些经典问题搜集:
Q1:本地版本回滚了,然后想让远端的版本也回滚。
远程和本地的版本库位:a->b->c
通过git reset --hard b.id 本地:a->b  push到远程  a->b
但是会出问题
A1:
假设一开始你的本地和远程都是:
a -> b -> c
你想把HEAD回退到b,那么在本地就变成了:
a -> b
这个时候,如果没有远程库,你就接着怎么操作都行,比如:
a -> b -> d
但是在有远程库的情况下,你push会失败,因为远程库是 a->b->c,你的是 a->b->d
两种方案:
1.push的时候用--force,强制把远程库变成a -> b -> d,大部分公司严禁这么干,会被别人揍一顿
做一个反向操作,把自己本地变成a -> b -> c -> d,
注意b和d文件快照内容一莫一样,但是commit id肯定不同,
再push上去远程也会变成 a -> b -> c -> d
简单地说就是你无法容易地抹去远程库的提交信息,所以本地提交怎么都行,push前想好了

2.使用 git revert 操作实现以退为进,
git revert 不同于 git reset  它不会擦除"回退"之后的 commit_id ,
而是正常的当做一次"commit",产生一次新的操作记录,所以可以push,不会让你再pull

你可能感兴趣的:(Git学习笔记(一))