一.简介与安装
1.简介
Git 是目前世界上最牛逼、最先进的分布式版本控制系统(没有之一)。
你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。
这三棵树分别是:工作区域、暂存区域和 Git 仓库
你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。
这三棵树分别是:工作区域(理解为本地文件夹)、暂存区域(中间代理)和 Git 仓库(真正提交版本的地方)
1. 工作区域(Working Directory)就是你平时存放项目代码的本地文件夹(目录)
2. 暂存区域(Stage)用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。(其实也是在本地,并未提交到远程)
一般存放在【.git】目录下的index文件(.git/index) 中,所以我们把暂存区有时也叫作索引。
3. Git 仓库(Repository)就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,
确切的说,应该是Git 仓库中 HEAD 指向的版本)。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。git中的head/master是分支,是版本库
Git 的工作流程:
1. 在工作目录中添加、修改文件;
2. 将需要进行版本管理的文件放入暂存区域;
3. 将暂存区域的文件提交到 Git 仓库。
因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed),依次对应上边的每一个流程。
add,commit,push的区别
[(本地工作目录)——-add —–>(缓存区)—-commit——–>(本地的git库)] ——-push———>(github)
[(本地工作目录)<——-checkout —–(缓存区)—-reset head<——–(本地的git库)] <——-pull———(github)
安装
下载地址: https://git-scm.com/download/win
安装: 一路next就行
注意:openssl 一定选它
安装完成后,右击菜单栏,有如下菜单,表示安装完成
进入git bash选项
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190323232607516-2087674159.png)
二.初始配置
1.用户名和邮件(使用者是谁)
> git config --global user.name "tjp40922"
> git config --global user.email "302624476@qq.com" --->告诉服务端你是谁
>git config --list 查看是否安装成功
2.设置和github.com的远程连接
要想使用SSH链接,你需要为本机生成一个key。方法如下所示,即使用语句
ssh-keygen -t rsa -b 4096 -C "你的邮件地址",
中间需要按几次回车,例如:
When you're prompted to "Enter a file in which to save the key," press Enter. This accepts the default file location。
然后你还需要
Add your SSH private key to the ssh-agent.
If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_rsa in the command with the name of your private key file.
经过上面的步骤,已经得到了Key,它就存储在上面你指定的路径下文件中,你可以使用一个文件编辑器打开它,然后把里面的内容复制到剪贴板待用。接下来,
In the upper-right corner of any page, click your profile photo, then click Settings,
如下图所示。
在右上角找到Settings->SSH keys-> Add SSH key ->拷贝在公钥(id_rsa.pub)文件中的所有的文本->完成了对GitHub上SSH Key公钥的添加。
这样就可以使用git去连接github上的repository了。
三.创建项目
1.创建项目
1.创建项目文件夹
2.进入项目文件夹 cd 项目文件夹名称
3.执行命令 git init (初始化) 会生成一个.git文件夹(隐藏的,如果你设置了隐藏文件不可见就看不到)
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190324101924768-1424304291.png)
四.常用操作
1.查看仓库状态
1. git status
2. git status -s (以简约方式查看)
-
-
绿色表示文件在暂存区
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190324102125398-856190087.png)
2. 添加文件到暂存区
# 添加项目中所有文件 git add . 或者 # 添加指定文件 git add filename
3.提交到本地仓库
git commit -m "版本描述" #把暂存区的文件提交到仓库(版本) -m代表的是message,提交说明
git commit -am '版本描述' #可以从一次性把工作区的所有文件ad到暂存区并且提交到仓库,也就是说你不需要自己去add了
4.手动删除
手动操作删除 或者 在命令行下 使用
rm 文件名 删除 都是表示在工作区删除. 对于这种删除,如果还原,则可以使用 git checkout 文件名
把添加到暂存区的文件覆盖到本地工作目录(倒回)
(就是说,无论文件是添加到缓存区还是提交到本地仓库,都可以通git checkout文件名来把文件从仓库还原到本地(工作区))
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190324103238195-1240463841.png)
5.版本删除
如果使用
git rm 文件名 (这种操作属于暂存区和工作目录删除,这种删除无法直接git checkout 文件名 来还原
如果直接执行git checkout 命令,则报错如下:
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190324103928263-1958669454.png)
如果要还原在暂存区中删除的文件,必须先执行 git reset head
![](https://img2018.cnblogs.com/blog/1513642/201903/1513642-20190324104151996-110721662.png)
6.查看历史版本(日志)
1. git log #查看我们提交的版本,每一次进行的提交的时间,作者
2. git reflog
过滤查看日志
git log –p
退出按【q】键
ctrl+f向下分页
ctrl+b 向上分页
显示指定日期之后的日志 git log --after '2018-11-6'
显示指定日期之前的日志 git log --before '2018-11-6'
指定显示指定开发者的日志 git log --author 'lisi'
3. git log --decorate --online --graph --all
以图形化显示在一行,所有的分支
7.
方案一:
git reset --hard HEAD^
-
-
HEAD^^
表示当前最新版本的前两个版本,以此类推... -
HEAD~1
表示当前最新版本的前一个版本 -
HEAD~10
表示当前最新版本的前10个版本,以此类推...
方案二:
git reset --hard 版本号
- 通过每个版本的版本号回退到指定版本
#扩展
git reset HEAD filename #(指定文件,不指定文件把最后一次提交的文件全部全部恢复到暂存区)
#reset选项
1.git reset --soft HEAD
移动HEAD指向,指向上一个快照
2.git reset --mix HEAD(--mix是默认的选项)
移动HEAD指针到上一个快照,将HEAD指针移动后指向的快照回滚到暂存区域
3.git reset --hard HEAD(这个用慎用,会直接把仓库的直接胡滚到工作区,覆盖工作区,你新修改的文件全没了)
移动HEAD指针到上一个快照,将HEAD指针移动后指向的快照回滚到暂存区域,将暂存区域的文件回滚到工作目录
4.head后面几个波浪线代表跨越几个版本,也可以指定id版本
5.也可以指定某些文件回到过去,指针不变
git diff #查看我们对本地(工作目录修改了哪些内容,看到的是工作区和暂存区文件的差异,并不是版本之间的差异)
8.取消暂存
git reset head git reset <file> :从暂存区恢复到工作文件 git reset -- :从暂存区恢复到工作文件
9.查看文件状态
针对与文件所处的不同分区,文件所处的状态: (1)未追踪, 文件第一次出现在工作区, 版本库还没有存储该文件的状态 (2)已追踪, 只要第一次,git add了文件, 文件就是已追踪 (3)未修改, 文件在工作区未被编辑 (4)已修改, 文件在工作区被修改 (5)未暂存, 文件已修改, 但是没有add到暂存区 (6)已暂存, 已经将修改的文件add到暂存区 (7)未提交, 已暂存的文件, 没有commit提交. 处于暂存区 (8)已提交, 提交到版本库的文件修改,只有commit以后才会有仓库的版本号生成
注意:
公司一般使用git管理项目,往往会搭建一个gitlab自己内部管理代码,也有公司选择使用码云的企业版仓库来管理
使用git开发项目时,有时候不一定通过https协议提交代码的。也有的公司是通过ssh协议提交,此时需要生成ssh公钥和提交公钥给仓库。[码云这些官网都会有详细的提示说明]
生成SSH公钥【必须安装git bash才可以使用这个命令,而且还要把git bash添加到系统变量里面】
ssh-keygen -t rsa -C "lisi@163.com"
参考:https://gitee.com/help/articles/4180
10.对比
1. git diff #查看我们对本地(工作目录修改了哪些内容,看到的是工作区和暂存区文件的差异,并不是版本之间的差异)
2.git diff 版本号 #比较本地工作目录个指定版本(仓库)的差异
3.git diff Head #本地工作目录和最新的版本(仓库)的差异
4.git diff --cached #比较暂存区和最新仓库的差异
5. git diff --cached 版本号 #比较暂存区和指定版本的差异
5. git diff 版本号1 版本号2 比较两个版本之间的差异
11.修改最后一次操作
1.提交后发现又想增加新文件或者有新的修改要提交
git commit --amend (会进入一个vim编辑器,可以增加补充说明,要可以直接退出)
git commit --amend -m '新的说明'
12.删除的几种种情况
1. 新增了一个文件并且add和commi之后发现这个文件是不要的,怎么从版本中删除呢?
1.直接git rm 文件名 删除
2.git status 你会发现被删除的文件还是在暂存区等待提交
所以应该这么做
1. git rm 文件名
1. git reset --soft Head~ soft(只改变指针)
说白了,新增的那个文件,先删除,再把指针改到上一个,就可以完全放弃这个文件了
2.一个文件提交到暂存区之后,在工作区又修改了这个文件,(正常情况是再次add,然后提交),怎么删除呢?
1.git rm -f 文件名 (把工作区和暂存区的同时删除)
2.git rm --cached 文件名 (只删除暂存区)
13.重命名
1.git mv 源文件名 新文件名
五.分支
1. 查看分支 git branch
2. 创建分支 git branch 分支名
3. 切换分支 git checkout 分支名
4. 合并分支 git merge
2.合并分支会遇到的情况
1.不同分支有相同文件名的文件
3.删除分支
git branch -d 分支名
六.远程管理
git remote add origin 远程项目的url # git 默认使用这个名字来标识你所克隆的原始仓库
git clone origin url 第一次把远程的克隆下来
git pull origin url #把远程的拉去下来
git push origin master 推送到远程,分支是master
七.github 和 git的区别?
git是一个分布式版本控制系统,不同类型的版本控制软件还有svn,mercurial,vss,SourceAnywhere等。
Github是一个集成了git的服务。它可以以网页或者客户端的形式,帮助用户把git本地的数据提交到远程的服务器里。
同样的服务还有git oschina,git 京东,git csdn。这些服务都是免费的。
用一句话形容这二者的关系:git是弓,你的代码是箭,github是靶子。
git是软件,它可在本地建立仓库,你写的代码的各个版本都可以存着
github是网上仓库,你写的代码的各个版本都可以存着。