本文共 6493 字,大约阅读时间需要 21 分钟。
之前做项目的时候学的是SVN:
特点:集中式 有一个终端服务器,你要提交代码得联网 然后向服务器提交代码 覆盖原来的 优点:可记录版本回滚 缺点:速度慢 得联网
这次主要来介绍一下Git:
特点:分布式没有终端服务器 可下载到本地进行分支操作优点:速度快 多人协作 记录所有版本号 可回滚缺点:没想到
Git是流行的版本控制 建议学习 学习成本也不高 两天足矣
这里只是做简单的教程 让你知道如何实现 本地创建项目到提交修改到远程的版本库和从Github中克隆仓库到本地 git有这几个区域 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库想深入了解的话 看GitHub入门与实践 这本书很详细
Git背景就不介绍了 直接上操作
使用工具:Git Bash 安装一直下一步 默认安装就好 问:为什么用这个 ? 答:第一步:Git初始化
首先需要对git进行初始化 git config --glotal user.name "jjc"git config --glotal user.email "1115106468@qq.com"该config文件保存在c盘的用户名下以后如果上传远程库的话 会显示 name和email为了方便交流 最好写英文的
第二步:检查版本号
git version可以查看版本号
第三步:创建版本库:
方法有两个:1. 通过命令行 cd d:/learngit // 自己创建的文件夹 learngit作为版本仓库 //cd是切换到d盘learngit文件下 git init // 初始化仓库2. 可以直接文件夹 然后右键 git init初始化库 不用cd进入一个文件夹
注意:版本库里面文本文件的格式要UTF-8 因为中文乱码问题
第三步 :了解版本库机制:
分三个区 : 1. 工作区 //包括.git文件夹 存储底层内容 2. 暂存区 //中间层 3. 版本库 //最终的项目 在版本库中创建的文件都在工作区内 要先add提交到暂存区 然后才commit增订版本库 Git是对操作的管理 而不是对文件的管理 第四步:进行各种操作的命令行git init //初始化一个Git仓库 最先要实现的操作 git status //可以查看仓库的状态touch README.md //创建被管理对象 README.md每个项目都有一个 相当于文档touch aa.txt //创建被管理对象git add //向暂存区中添加文件git commit -m “name” //保存仓库的历史记录 name是给你的最新版本描述信息 //也可以直接git commit进行更详细的说明git log //可以查看历史日志信息 如版本信息 提交人名字邮箱 日期git log --pretty=short 或者--pretty=oneline //如果嫌弃太长 简述信息git log -p 文件 //显示文件的日志和提交前后的差异git add . //该目录下全部文件添加到暂存区clear //清空当前页面git diff //查看暂存区和工作区状态差别git reset --hard HEAD^ // 返回上一个版本git reset --hard HEAD~100 // 上100个版本git reset --hard 3628164 // 返回到指定版本库cat readme.txt //可以查看当前文件文本内容git reflog //可以查看历史操作q //返回上一个层次git checkout -- readme.txt //把readme.txt文件在工作区的修改全部撤销rm test.txt //删除文件 只是修改了工作区 还没有提交暂存区git rm test.txt //删除文件 修改了工作区并且提交到了暂存区
总结:
在工作区单纯创建文件夹 没用 你得在里面创建文本文件才会提示可添加 而且只提醒文件夹 不会具体到里面的文本文件 git init 后git status显示 Untracked 表示是没有被添加到暂存区中git commit进行更详细的说明
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;
第一次修改 -> git add -> 第二次修改 -> git commit 最新版本只是保存了第一次修改的内容
记住:每次修改,如果不add到暂存区,那就不会加入到commit中每次修改后 都要 git add . 是当前目录所有文件全部添加 就算是删除也是如此
删除后 也要 add 上传到仓库中 然后commit 保存当前版本 log也可以显示出这个信息 git log: 显示历史版本 如果版本数多 拉到底 有个end 但是无法继续输入cmd命令行 可以q返回上一层继续输入cmd diff: 如果git add . 后再git diff 则什么也不会显示 //因为diff是暂存区和工作区区别 git diff HEAD 可以查看工作区和版本库里面最新版本的区别 然后再commit commit之后没啥显示 //因为此时 工作区和版本库一样 如:git diff HEAD – readme.txt命令 可以查看工作区和版本库里面最新版本的区别版本回退
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到你要的版本的commit id是3628164…,于是就可以指定回到未来的某个版本:
$ git reset –hard 3628164
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。 版本号用git log就可以找到 是一串哈希值 下图中的 commit后面那一串就是了粘贴复制:
右击copy复制 paste粘贴 Ctrl+ins 复制 ins全名是insert Shift+ins 粘贴查看历史操作:
git reflog 可以查看历史操作 然后找到原来版本的 commit id HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit id 穿梭前,用git log可以查看提交历史,就可以看到那串哈希值了以便确定要回退到哪个版本。 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。git checkout
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改, 等于说status 有了两个状态 (git rm 是一个状态 但是工作区和暂存区都修改了 不一样 )现在,撤销修改就回到添加到暂存区后的状态。(第二次对工作区的操作被取消 保留第一次对工作区的操作 而且暂存区中的状态还存在)
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令git reset HEAD file
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。 又到了小结时间。场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file回到添加到暂存区操作前,就回到了场景1,第二步按场景1操作。
删除:
rm test.txt 删除文件 但是还要add 才可以 commit 如果是 git rm test.txt 就直接commit如果确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit 回退删除:git checkout -- test.txt其实是用版本库里的版本替换工作区的版本,无论 工作区是修改还是删除,都可以“一键还原” 前提没有add提交到暂存区 如果是 git rm删除的话 要先git reset head aa.txt 这样撤销添加到暂存区 的指令 回到添加到暂存区前的状态 这个时候工作区那个虽然aa.txt还是被删除的 只 是没有提交到暂存区而已 然后 git checkout --aa.txt 直接丢弃工作区的修改 如果 提交到暂存区 然后再修改 status看的话 有两个操作 git reset HEAD aa.txt 只是取消了暂存区内的操作
第五步:添加远程库
登陆你的github创建一个新的仓库 具体的创建过程省略 比如创建了learngit 目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。 现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:绑定remote
首先要把本地版本库和github上的绑定 git remote add origin xxx(你的仓库地址)http和ssh都行 接下来介绍的是ssh的
重点: 在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地。这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码上传push
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在github页面中看到远程库的内容已经和本地一模一样了从现在起,只要本地作了提交,就可以通过如下命令:
git push origin master绑定比较简单
你可以通过本地版本库的 config查看但是push推送就比较麻烦了 你得设置ssh 不然报错 说你没有访问权限
首先查看一下 你电脑有没有.ssh记住上传的时候这三个是必备的:
从远程库克隆
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
不只可以克隆自己的仓库 还可以克隆别人的
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
小结
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
开源许可证:
三个东西是注意的:
1. README.md : 来描述你的项目 必要的 2. gitignore 忽略文件什么的 3. LICENSE 开源许可证 可参考如下地址 4. ssh密匙目前就学习了这么多 可以实现简单的个人上传 克隆操作
那有个问题就是 如何在github中的md中显示图片?
方法就是 你先把图片一起传到仓库中 然后右击图片有个复制地址 然后 在Markdown中引用图片![随便起个名字](复制的图片地址)
参考: