使用git的详细步骤
第一步:安装git
1、要想使用git,首先得安装git,要不然怎么用,对不对?嘻嘻。至于安装,百度一下即可。
2、安装完成后,windows系统下,在任何位置右键一下,若有git bash这个选项即代表安装成功了。
3、绑定用户:选择git bash后输入一下两个命令:
git config --global user.name “Your Name”
git config --global user.email "email@example.com"
第二步:练习小demo
1、建立本地仓库
选择一个空文件夹作为本地仓库,我新建了一个learngit文件夹。右键这个本地仓库,点击git bash,会出现一个类似于命令行界面的东西。然后执行git init命令,结果如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qL6bhiV0-1581933378113)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574436773881.png)]
此时,该文件夹下会出现一个.git的文件夹,这是个隐藏文件夹,如何查看隐藏文件夹,百度即可。
2、将资源提交到仓库。
新建一个readme.txt文件作为待提交资源,内容随便,在此我将写入以下内容:
Git is a version control system.
Git is free software.
然后将readme.txt(资源)放入本地仓库(learngit)。然后,先将资源填加到仓库(git add learngit.txt),接着提交到仓库(git commit -m “write a readme file”)。-m 后面的内容自定义,一般当作简单的提交记录信息,当然也可以不写,不过最好写。至于不写提交记录信息的命令是什么,可以自己查哦。
结果截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L9NqNlar-1581933378118)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574437550710.png)]
3、资源发生修改
此时资源发生修改,随便改,在此我将内容改为:
Git is a distributed version control system.
Git is free software.
此时,我们运行git status命令看一下结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lrdmJXWI-1581933378122)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574437780864.png)]
这里只告诉我们待提交资源readme.txt发生了修改,但还未提交新版本。不过不能看到具体内容改变了什么。不过呢,git diff readme.txt可以帮我们实现这个功能。结果如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dybq3LJ6-1581933378123)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438085504.png)]
既然修改过了,也提示我们该再次添加和提交资源,那么我们就重新添加和提交资源到仓库。结果如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6rU1ZXLw-1581933378129)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438242209.png)]
· 此时,我们用git status查看下当前仓库的状态:(正常情况下不用查看)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6J5QrB2k-1581933378132)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438324680.png)]
git status告诉我们,将要提交的修改包括readme.txt,下一步就可以放心地提交了:git commit -m "add distributed"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hlBkQ9kh-1581933378134)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438510783.png)]
此时,git status 则会告诉我们没有需要提交的修改了。工作目录是干净的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bAsYLMD-1581933378138)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438585927.png)]
4、版本回退
既然是为了掌握版本回退,那么多修改几个版本是不是效果更明显呢?顺便练习下修改,一举两得,何乐不为。
修改文件内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
重新添加和提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8SxqGtOr-1581933378140)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574438985745.png)]
那么,现在我们就已经有了三个本版,我么可以用git log来查看所有版本。如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBxqF23p-1581933378142)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574439078603.png)]
如果嫌输出内容过多,可以加一个参数**–pretty=oneline**,效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1KUbKv0-1581933378145)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574439252825.png)]
最前面那个则是版本号,是按照时间生成的的。至于如何生成的,大佬可以自行了解,菜鸡不配知道,我就是属于不知道的那一块。
现在关键来了:版本回退到上个版本:
git reset --hard HEAD^
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knPU1YP2-1581933378148)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574439607796.png)]
看,此时版本回到了add distributed这个版本,即上个版本。此时,再用git log查看下所有版本。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EcAbw1Y7-1581933378150)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574439734867.png)]
append GPL那个版本消失了,不见了,回家找妈妈去了。当然还能返回到append GPL那个版本。丢了的东西,当然可以找回来,不过得有线索。这个线索嘛,当然就是版本号了,找到想要回到版本的版本号,用git reset --hard 版本号OK了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSwAywFj-1581933378152)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1574440031453.png)]
看,用git log查看后,是不是有回来了呢,在此版本号不用全写,简写几位即可,但也不能过短,不然机器怎么分辨是哪个版本,它个白痴又不是我们肚子里的蛔虫。
hard参数讲解 |
---|
仔细观察我们使用git log时,最新版本后会有个HEAD,这个HEAD就像指针一样指向最新版本,hard的作用就是改变HEAD指针的指向。 |
commit id防丢小知识:假如我们关闭了终端,找不到commit id了,我们就可以再次使用git reflog来查找,git reflog的功能就是记录每一次命令。
5、工作区和暂存区
工作区:比如目前的learngit文件夹。
版本库:就是工作区那个.git隐藏目录。
暂存区:版本库里的stage(或者叫index)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmRQzxGS-1581933378154)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575202835127.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xoKmCPM-1581933378155)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575202864343.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7QWnGWoh-1581933378157)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575202879848.png)]
注:此处知识,观看廖雪峰的git教程即可。
6、管理修改
git diff HEAD – readme.txt 命令可以查看工作区和版本库里面最新的区别。
7、撤销修改
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
7.1、当未add如暂存区时,只需要执行git checkout – 文件名就可以撤销修改。
7.2、当add入暂存区时,则需要先执行git reset HEAD 文件名先撤出暂存区,再执行git checkout – 文件名才可以撤销修改。
8、删除文件
- 8.1、删除需要要删除的文件,使用文件管理器或者命令执行都可以。
- 8.2、git status此时则会告诉你,工作区和版本库就不一致,并指出什么东西被删除了。
- 8.3、继续执行删除或者撤销删除:
- 8.3.1、继续执行删除:用git rm 文件名从版本库中删除改文件,并且提交git commit。
- 8.3.2、撤销删除:因为版本库中还存在误删的文件,那么就可以使用git checkout – 文件名将版本库中的文件替换工作区的版本。无论工作区是修改还是删除,都可以“一键还原”。
注:命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
第三步:远程仓库
1、创建远程仓库
-
1.1、Github可以免费获得一个远程仓库。
-
1.2、绑定Key和Github,每一台电脑对应一个Key,可以多绑定。
因为Git本地仓库和Github远程仓库之间的传输是通过SSH加密的,因此需要进行一些简单的配置:
-
1.2.1、创建SSH Key。
ssh-keygen -t rsa -C "youremail@example.com" 使用上述命令即可,一路enter即可。想设置密码可以自行设置。 一切顺利的话即可在用户主目录里找到.ssh目录,id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
-
1.2.2、绑定Github
登录Github,打开Account settings,然后点击SSH Keys页面,点击new SSH Key,天上任意Title,在Key文本框里粘贴id_rsa.pub文件里的内容。
-
注:为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
-
2、添加远程仓库
-
2.1、使用Github创建一个远程仓库。
-
2.1.1、点击Create a new repo,输入一个远程仓库名,其他默认即可。
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dU1lCgNH-1581933378159)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575207939036.png)]
-
git remote add origin https://github.com/mhwww/learngit.git
执行上述代码,截图那个页面里有。
-
添加后,远程库的名字就是
origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
-
-
2.2、把内容推送到远程仓库上
-
2.2.1、执行命令git push -u origin master即可。
-
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
-
-
2.3、再次推送内容
- 推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
- 从现在起,只要本地作了提交,就可以通过命令:git push origin master把本地
master
分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
3、从远程仓库克隆
点击Clone 或者Download 按钮,可以找到以下两个页面(点击ssh或者https就可以切换)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbRBOy0g-1581933378160)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575209381095.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBwwoXLa-1581933378162)(C:\Users\MHW\AppData\Roaming\Typora\typora-user-images\1575209413436.png)]
然后使用**git clone 【key】/【url】**即可克隆仓库,克隆成功后即可观察到远程仓库的内容。
注:你也许还注意到,GitHub给出的地址不止一个,还可以用`https://github.com/michaelliao/gitskills.git`这样的地址。实际上,Git支持多种协议,默认的`git://`使用ssh,但也可以使用`https`等其他协议。
使用`https`除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用`ssh`协议而只能用`https`。