百度百科对git的定义如下:git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
???????1.什么是版本控制呢?
???????版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
???????举个直观的例子,假如你现在正在用记事本写一篇很长的文章,写到一半你想大幅修改或者删除某一部分,但你又怕将来想恢复。通常我们另存为一个副本,然后继续修改,有需要时再另存为一个副本。过了很久,你想恢复到之前的某一个副本,但已经记不清哪个副本是你想要的了,只能一个一个找。看着这一大堆副本,想删掉又怕以后会用到。还有时候,你需要让其他人帮你写一部分,于是你把文件发给他,然后继续编辑。几天后,他再把他修改后的文件发回给你,你得把他修改的部分和你的改动合并,想想就头痛。
???????Git就是这样一个牛逼的软件,它能帮你追踪文件的变更和变更信息(什么人、改了什么文件、怎么改的文件等),还可以实现并行开发(帮助合并文件等)。
???????2.集中式vs分布式
???????对于CVN及SVN这些集中式版本控制系统来说,版本库是集中存放在中央服务器中的。如果还用写文章来举例的话,使用集中式版本控制系统进行版本控制时,如果你要修改一些内容,需要先从中央服务器中取出最新版本,修改完毕后再推送给中央服务器。也就是说,如果没有网络,集中式版本控制系统是无法工作的。而且一旦中央服务器出现意外,就全体爆炸。
???????而以git为代表的分布式版本控制系统没有中央服务器,每个人的电脑上都是一个完整的版本库,工作时不需要联网。通过分布式版本控制系统进行多人协作就更简单了,每个人将自己的修改推送到其他人的电脑就可以互相看到所有修改了。实际使用时,很少两个人直接在电脑之间推送各自的变更,而是借助一台充当“中央服务器”的电脑,这台电脑的作用仅仅是用于和合并和交换修改,没有他依然可以工作。
???????举个简单的例子:使用SVN进行版本控制时,如果没有网络是不能commit修改的。而使用git时,因为本地有完整版本库,commit命令是commit到本地仓库,即使没有网络也完全没影响,仅仅是不能push到云端而已。
————————————————
本文为CSDN博主「五撸超人」的原创文章。原文链接https://blog.csdn.net/weixin_41631970/article/details/87230336
官网下载链接
https://git-scm.com/downloads
本地库(历史版本区域)
↑
使用git commit命令将暂存区的代码提交到本地库
↑
暂存区(临时存取区域)
↑
使用git add命令将写的代码暂存到暂存区
↑
工作区(写代码区域)
团队内部协作
跨团队协作
mkdir WeChat
git init
cd .git
ls -lA
用户名:gui
Email地址:goodMorning@123.com
用于去分不同开发人员的身份
这里设置的签名和登陆远程库(代码托管中心)的账号、密码没有任何关系。
git config user.name gui_pro
git config user.email goodMorning@123.com
信息保存的位置:./.git/config文件
git config --gloal user.name gui_glb
git config --gloal user.email goodMorning_glb@123.com
信息保存的位置:~/.gitconfig文件
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。
如果只有系统用户级别的签名,就一系统用户级别的签名为准。
二者都没有不允许。
git status
// 查看工作区、暂存区状态
vim good.txt
-------------
aaaaaaa
bbbbbbbbb
git add good.txt
// 将工作区的“新建/修改”添加到暂存区
vim good.txt
-------------
aaaaaaa
bbbbbbbbb
ccccc
ddd
git commit -m "My second commit,modify good.txt" good.txt
//将暂存区的的内容提交到本地库
//-m 后面跟的是提交描述
git log
git log --pretty=oneline
git log --oneline
//与上条命令对比,该命令将hash值缩短了。只显示过去的版本
git reflog
//显示了版本号,对版本的前进和后退有直接参考价值
//HEAD@{移动到当前版本需要多少步}
本质是操作HEAD指针进行版本的前进后退
git reset --hard [局部索引值]
git reset --hard 9a9ebe0
//往后退一步
git reset --hard HEAD^
//往后退三步
git reset --hard HEAD^^^
//总结:一个^符号退一步
//往后退三步
git reset --hard HEAD~3
//往后退n步
git reset --hard HEAD~n
--soft参数
仅仅在本地库移动指针
--mixed参数
在本地库移动HEAD指针
重置暂存区
--hard参数
在本地库移动HEAD
重置暂存区
重置工作区
原文:https://www.cnblogs.com/nthforsth/p/12228414.html