不做标题党系列--git

222 阅读7分钟

git是什么?

 官方介绍: Git是目前世界上最先进的分布式版本控制系统。

那么问题来了分布式版本控制系统又是个什么鬼?

    简单的说,分布式的版本控制就是每个人都可以创建一个独立的代码仓库用于管理,各种版本控制的操作都可以在本地完成。
    每个人修改的代码都可以推送合并到另外一个代码仓库中。
    而像SVN这样,只有一个中央控制,所有的开发人员都必须依赖于这个代码仓库。
    每次版本控制的操作也必须链接到服务器才能完成。很多公司喜欢用集中式的版本控制是为了更好的控制代码。
    如果个人开发,就可以选择Git这种分布式的。

接下来

特点: 直接记录快照,而非差异比较

 Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。
 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。
 这类系统(CVS、Subversion、Perforce、Bazaar等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
 存储每个文件与初始版本的差异。
 Git 和其他版本控制系统的主要差别在于:
 Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
 这类系统 (CVS,Subversion,Perforce,Bazaar等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
 这类系统的工作方式如下图:

 Git 并不保存这些前后变化的差异数据。
 实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。
 每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照 的索引。
 为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。
 Git 的工作方式如图所示:

图片来自互联网,如有侵权,请联系我删除。谢谢!

特点: 文件的三种状态

对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据库 中了;已修改表示修改了某个文件,但还没有提交保存;
已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git的工作目录,暂存区域,以及本地仓库。

Git特点有很多,这里就不详细的说那么多,就说个人觉得比较值得说的(纯属个人想法,么有好与不好之说),避免篇幅太长过于枯燥,后期有机会会针对性的聊聊。

有兴趣的针对性的可以去查阅资料:

1.直接记录快照,而非差异比较
2.近乎所有操作都是本地执行
3.时刻保持数据完整性
4.一般只添加数据
3.多数操作仅添加数据
4.文件的三种状态

git 工作流:

1.在文件目录下更改某些文件
2.将修改的文件进行快照(add),然后添加到缓存区域(commit)
3.将缓存区域的改动提交到远程git目录(push)
流程: add => commit => push

图片来自互联网,如有侵权,请联系我删除。谢谢!

实战流程:

新建项目:

本地仓库操作:
git init 初始化git工作目录(git init –bare功能相同),初始化本地仓库,默认有master主分支;
touch 命令创建文件;
git status 查看文件改动状态(未进行快照的文件名为红色);
git add 《文件名》 进行某个文件快照(add . 操作所有改动文件);
将文件进行快照后 再次执行git status  已进行快照的文件名为绿色;
git rm --cached 《文件名》删除add操作

git commit -m'这里是提交日志'
当将改动的文件进行快照之后,下一步执行git commit -m 这里就是将改动提交到本地仓库;

回退(删除)commit 提交:
git reset --hard commit_id 退到/进到 指定commit的sha码(通过git log查看sha码)
git reset --soft HEAD^ 仅仅是撤回commit操作,写的代码依然保留;
git reset --mixed HEAD^ 不删除工作空间改动代码,撤销commit,并且撤销git add . 
HEAD^的意思是上一个版本,也可以写成HEAD~1,如果你进行了2次commit,想都撤回,可以使用HEAD~2
git reset --hard HEAD^ 删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
commit注释写错了,只是想改一下注释,只需要:git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
git commit -m'' 单引号注释可以换行

git log 可以查看你的提交日志
git log -p -2  展开显示每次提交的内容差异, 用 -2 则仅显示最近的两次更新
定制格式 format:
git log --pretty=format:"%h - %an, %ar : %s" 定制要显示的记录格式
git log --author 显示指定作者的提交
git log --grep 搜索提交说明中的关键字。
请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用--all-match 选项。)
git log -- <path> 指定路径查看。
如果只关心某些文件或者目录的历史提交,可以在 git log 选项的最后指定它们的路径。
因为是放在最后位置上的选项,所以用两个短划线(--)隔开之前的选项和后面限定的路径名。

本地操作完成之后就是提交到远程git仓库了。
添加远程仓库
git remote add origin ssh://root@10.0.0.5/usr/***/***/.git(需要先配置好秘钥)
git remote –v 查看本地存储的远程仓库信息 
git push 将本地代码提交到远程服务器

到此为止 本地新建git项目到提交到git远程仓库基本流程完成。

已有项目:

本地仓库操作:
git clone <项目地址,https 或者是.ssh 都可以> 、从远程库中克隆代码仓库(需要配置好权限)
git  pull从 远程拉取最新版本到本地 自动合并 merge  git pull origin master
git  fetch  从远程获取最新版本到本地 不会自动合并 merge  git fetch  origin master
多说一点 实际使用中使用git fetch 更安全  在merge之前可以看清楚更新情况 再决定是否合并
git log  -p master ../origin/master     git merge orgin/master


到这里本地已经有项目了,那么接下来就到分支的讲解了。

git branch testing  新建分支
git branch -r 查看远程分支
git branch -a 查看所有分支

git checkout testing 切换分支
上面两个命令也可以合成为一个命令:git checkout -b testing

基于当前分支的某一次commit来创建分支:
git log --oneline  可以查看commit_id

git branch new_branch fe6523e 会创建基于这个commit——id的新分支

当你切换到工作分支后,后面流程就是和本地项目一样的add => commit => push。

到这里git入门的流程就讲完了,希望可以对一些朋友有帮助。

更多更详细的后期在继续更新,会有针对性的聊聊自己对每一个命令的理解。

第一次写,排版很low,内容有写不对的地方希望各位大佬多多指正,感谢!😀😄😄

如果觉得小弟写的还算有点东西,希望各位点个赞支持下!各位的点赞就是源源不断的动力!

                                                            -------代码世界,你我同行!