我的git学习记录------------从廖雪峰老师网站的学习总结

Posted 少年风华正茂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的git学习记录------------从廖雪峰老师网站的学习总结相关的知识,希望对你有一定的参考价值。

这篇文章只用作自我学习,部分参考来自廖雪峰老师网站


mkdir 路径/文件名(d:/test)  创建文件夹
cd  路径/文件名(cd d:/test)  进入文件夹
pwd   显示当前所出位置的路径   确保全英路径(注意)


cd 仓库(repository)文件路径       eg(cd d:/test)


git init   初始化空的仓库,把这个目录变成git可以管理的仓库


编写一个readme.txt文件,内容如下:
Git is a version control system.
Git is free software.                   放到learngit目录下


git add告诉Git,把文件添加到仓库   
git add readme.txt    没有任何显示,这就对了(readme.txt必须存在)
git add .    添加当前所有更改到下一个commit   


命令git commit告诉Git,把文件提交到仓库
git commit -m "wrote a readme file" //说明提交了什么
git commit -m ‘说明‘  eg(git commit -m ‘my first text‘)
git commit命令,-m后面输入的是本次提交的说明,
可以输入任意内容,当然最好是有意义的
为什么Git添加文件需要add,commit一共两步呢?
因为commit可以一次提交很多文件,即你可以多次add,以此commit




添加到git库成功后,手动去修改txt的信息
使用$git status命令看看结果,他会告诉你那个文件发生了改变却没有提交
git status命令可以让我们时刻掌握仓库当前的状态,
上面的命令告诉我们,readme.txt被修改过了,
但还没有准备提交的修改。


git diff readme.txt    看看具体修改了什么内容
然后就可以提交修改了   $ git add readme.txt   没有提示说明成功
commit之前试用下git status命令可以看到readme待提交
然后提交 $ git commit -m "fir modify"
提交后,我们再用git status命令看看仓库的当前状态
你会看到 noting to commit 


下面重复修改一次,内容如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.


如果你想使readme恢复到修改前的版本或者查看修改前的版本
我们先看下历史记录  git log   
git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,
可以试试 git log --pretty=oneline 命令 只显示说明信息
你看到的一大串类似3628164...882e1e0的是commit id(版本号)


下面准备把readme.txt回退到上一个版本
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交
上一个版本就是HEAD^ ,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
现在我们回退到上一个版本$ git reset --hard HEAD^ 
此时我们git log --pretty=oneline 命令
你会发现最新的那个版本已经看不到了,突然不想修改了,想恢复到最新的版本怎么办
只要命令窗口没有关掉,可以根据commit id指定回到未来的某个版本
例如$ git reset --hard 283d9078//id号的前几位,不用写全
然后就又恢复到最新的版本了


现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,
想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的。
当你用$ git reset --hard HEAD^回退到add distributed版本时,
再想恢复到append GPL,就必须找到append GPL的commit id。
Git提供了一个命令git reflog用来记录你的每一次命令
你就可以根据commit是的说明,定位到commitID了






Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
工作区(Working Directory)就是你在电脑里能看到的目录,比如我的test文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。


前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,
现在,git commit就是往master分支上提交更改。
所以,git commit -m ‘‘ 是把暂存区的东西提交到分支,
而git add是把工作区的改变提交到暂存区
注意理解这个逻辑


Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件
即git记录了修改,而不是记录文件
$ cat readme.txt  浏览文件内容   着重理解暂存区的概念,
掌握add和commit操作的区域以及作用


撤销修改
git checkout -- file 可以丢弃工作区的修改   意思就是,把readme.txt文件在工作区的修改全部撤销
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,
我们在后面的分支管理中会再次遇到git checkout命令。


删除文件
在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交
$ git add test.txt
$ git commit -m "add test.txt"
git remote (github上对应仓库的url)   例子如下
git remote [email protected]:fenghuayangyi/hello-world.git
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
$ rm test.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
$ git rm test.txt
$ git commit -m "remove test.txt"  文件就从版本库中被删除了。


另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt




Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。
实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,
并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
这样就实现了团队的版本控制
GitHub这个神奇的网站,就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。


第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,
如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C ‘[email protected]‘  邮件地址换成你自己的邮件地址
第一次停顿,敲回车,然后两次输入密码
就能在你的windows主目录看到.ssh文件夹(主目录就是你的c盘users文件夹下)
一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件
这两个就是SSH Key的秘钥对,
id_rsa是私钥,不能泄露出去,
id_rsa.pub是公钥,可以放心地告诉任何人


第2步:登陆GitHub,打开“settings”,“SSH Keys”页面:
填上任意Title,在Key文本框里粘贴你本地.ssh目录下的id_rsa.pub文件的内容


为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,
而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,
只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。
***另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。






添加远程库
在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,
又可以让其他人通过该仓库来协作
登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库
在Repository name填入test3,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库.
目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
我们根据GitHub的提示,在本地的test3仓库下运行命令:


If you‘re updating to use HTTPS, your URL might look like:
$ git remote add origin https://github.com/shlly/test3.git
If you‘re updating to use SSH, your URL might look like:
或者$ git remote add origin [email protected]:michaelliao/learngit.git


git remote add (github上对应仓库的url)  例子如下
git remote add [email protected]:fenghuayangyi/hello-world.git


git remote add origin (github上对应仓库的url)  例子如下
git remote add origin [email protected]:fenghuayangyi/hello-world.git


请千万注意,把上面的shlly替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,
因为你的SSH Key公钥不在我的账户列表中。


添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的
下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master 
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样


在这个过程中会出现失败 fatal unable to access我的是网络的原因,还有就是使用了https,我的建议是使用ssh方式,下面有二者转换的说明


从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master




SSH警告
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host ‘github.com (xx.xx.xx.xx)‘ can‘t be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。




GIT代理设置


查看是否设置


git config --global http.proxy


设置代理


git config --global http.proxy 127.0.0.1:8582


取消代理


git config --global --unset http.proxy 


使用上面命令查看,原来GIT在安装后自动设置了一条 127.0.0.1 的代理。




Switching remote URLs from SSH to HTTPS
$git remote -v
$git remote set-url origin https://github.com/shlly/test3.git
$git remote -v


Switching remote URLs from HTTPS to SSH
$git remote -v
$git remote set-url origin [email protected]:shlly/test3.git
$git remote -v




git pull origin master(拉下来 origin master 第一次配置本机git)
当同步的库内有文件,需要线上本地同步的时候需要此命令






ssh -T [email protected]   上传文件到github


git pull origin master


git push -u origin master


git add .


git commit -m ‘123‘ 文件说明


git push origin master






以上是关于我的git学习记录------------从廖雪峰老师网站的学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Git学习笔记(一)创建版本库并添加文件

Git使用记录 NO1

git学习

git的简单玩法

廖雪峰git学习笔记

廖雪峰Git教程学习笔记