0、快捷方式
git add . //将当前目录所有文件添加到暂存区
git commit -m "提交信息" //提交至版本库
git push //上传至github
一、Git简介
1.Git介绍
ctrl+g 是CSDN的查找替换
Git是目前世界上最先进的分布式版本控制系统。
工作原理 / 流程:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
2.SVN与Git区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
3.window下的Git
- Git Bash //Git命令行(主要使用)
- Git GUI
- Git CMD
安装后在GIt Bash下的环境配置
因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
注意:git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
//设置用户名
git config --global user.name "xxx0461"
//设置邮箱
git config --global user.email "xxx0461@qq.com"
二、Git Bash使用
1.命令行创建版本库
- 首先在电脑上创建一个目录,用于做Git的版本控制目录;
cd D:
cd LINUX_C
mkdir test
//进入创建的文件夹初始化Git目录
git init //该目录就变成了git可以管理的目录
- 将文件加入版本库
首先在上述目录下创建一个文件,例如readme.txt
//将文件添加到暂存区
git add readme.txt
//将当前目录所有文件添加到暂存区
git add .
//将文件提交到仓库
git commit -m "提交日志"
//查看文件状态,查看是否有文件未提交
git status
- 当修改文件后
//查看文件哪里被修改
git diff readme.txt
//确认无误后可以用以上两步提交到版本控制库
- 版本回退
//查看历史版本
git log
//回到上一版本
git reset --hard HEAD^
//回到上上一版本
git reset --hard HEAD^^
//回到上100版本
git reset --hard HEAD~100
//查看版本号
git reflog
//回到相应版本号,例如回到6fcfc89版本
git reset --hard 6fcfc89
- Git撤销修改和删除文件
//---------撤销修改-------------
//1.在没有add之前
//法1:直接在图像化界面删除错误内容
//法2:用命令
git checkout -- readme.txt //把readme.txt文件在工作区做的修改全部撤销
1.readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
2.另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
//---------删除文件-------------
一般情况下,可以直接在文件目录中把文件删了,或者使用如上rm命令:rm b.txt ,如果我想彻底从版本库中删掉了此文件的话,可以再执行commit命令 提交掉,现在目录是这样的,只要没有commit之前可以使用如下命令 git checkout – readme.txt恢复删掉的文件。
2.工作区与暂存区的区别
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
三、远程仓库
1.项目上传
- 搞好GitHub
- 创建SSH Key
1.先创建C盘的.ssh目录和秘钥文件
//两种秘钥
ssh-keygen -t rsa -C "邮箱"
ssh-keygen -t ed25519 -C "邮箱"
//如下好用
ssh-keygen -t rsa -C xxx0461@qq.com
进入.ssh目录cd ~/.ssh
输入gedit id_rsa.pub打开id_rsa.pub文件,复制其中所有内容。接着访问http://git.oschina.net/profile网页,点击SSH公钥,标题栏可以随意输入,公钥栏把你刚才复制的内容粘贴进去就OK了。
git remote add origin https://github.com/1097730461/LINUX_C1.git
git branch -M master
//第一次上传
git push -u origin master
//之后上传
git push origin master
//或者
git push
- 在本地创建一个版本库(即文件夹),通过git init把它变成Git仓库;
- 把项目复制到这个文件夹里面,再通过
git add <目录或文件>
把项目添加到仓库; - 再通过
git commit -m "注释内容"
把项目提交到仓库; - 再
git push -u origin master
(才能真正把项目提交到仓库) - 在Github上设置好SSH密钥后,新建一个远程仓库,通过git remote add origin xxx(复制项目中Clone or download地址)将本地仓库和远程仓库进行关联;
- 最后通过git push -u origin master把本地仓库的项目推送到远程仓库(也就是GitHub)上;(若新建远程仓库的时候自动创建了README文件会报错,解决办法看上面)。
//从GitHub上下载项目到本地
git clone +你想要克隆的项目的地址
2.跳坑记录
- 报错内容:but
You’ve successfully authenticated, but GitHub does not provide shell access.
或者:errno
fatal: unable to access ‘https://github.com/1097730461/LINUX_C.git/’: OpenSSL SSL_read: Connection was reset, errno 10054
又或者:Timed out
fatal: unable to access ‘https://github.com/1097730461/LINUX_C.git/’: Failed to connect to github.com port 443 after 21125 ms: Timed out
-
问题原因
问题1原因:
在git push 的时候提示输入账号密码。但我在另一个项目配置过 ssh 免密的。并且现在 git 也不允许 http 连接,所以提供账号密码也没办法 push。
虽然是用 git 命令push,但本质上仍然是 https,所以不允许提交。 -
解决办法
使用 git remote -v 查看现在的远程 url 地址。
git remote -v
origin https://github.com/balala8/N0va_for_mac.git (fetch)
origin https://github.com/balala8/N0va_for_mac.git (push)
修改url链接
git remote set-url origin git@github.com:1097730461/LINUX_C.git
再次查看
git remote -v
origin git@github.com:balala8/N0va_for_mac.git (fetch)
origin git@github.com:balala8/N0va_for_mac.git (push)
使用ssh测试链接
ssh git@github.com
之后就可以正常提交了。
GITlab 上传代码
在GITlab中以下步骤非常有效:
- 先在GITlab中创建一个仓库(项目)
- 找一个文件夹用bash命令行Clone到文件夹
git clone git@git.n.xiaomi.com:xwave/linux_study.git
- 在当前文件夹下打开git bash如有必要,将当前文件夹和远程仓库链接,并进入master
//如有必要进行如下两步
git remote add origin https://github.com/1097730461/LINUX_C1.git
git branch -M master
//在本地文件夹放入新的代码文件后,用以下方式上传到远程仓库
git add <目录或文件> //操作两次
git commit -m "注释内容"
git push -u origin master //之后推可直接用 git push