设为首页 收藏本站
查看: 1244|回复: 0

[经验分享] Git学习(一)

[复制链接]

尚未签到

发表于 2018-9-17 09:51:03 | 显示全部楼层 |阅读模式
  Git的简介
  Git是分布式版本控制系统    没有中央服务器,每个人的电脑都是一个完整的版本库   分支管理
  CVS和SVN都是集中式的版本控制系统    中央服务器    联网工作
  
  什么是版本库
  repository,可简单理解成一个目录
  这个目录里的所有文件都可以被git管理起来,Git可以最终这个目录中每个文件的修改和删除
  Git的工作流程
  从资源库克隆Git资源到工作副本,作为工作目录
  对副本进行增删改等操作
  如果别人进行了修改,我们可以更新资源
  提交之前查看文件状态及修改情况
  进行提交及推送操作
  如果发现了错误可以撤回并重新提交及推送
DSC0000.png

  Git的基本概念
  工作区:在电脑上可以看到的目录,以下例子为my_git/
  版本库:为工作区的隐藏目录.git,它是Git的版本库,这个不算工作区,这个版本库里有暂存区、git
  自动为我们创建的第一个分支master、指向master的指针HEAD
  暂存区:在工作区的隐藏目录.git下,一般为.git/index,有时暂存区也叫索引(index)
DSC0001.png

DSC0002.png

DSC0003.png

  git add就是把文件添加到暂存区    git commit就是把暂存区的所有内容提交到当前分支
  创建仓库
  git init
  初始化一个Git仓库,执行完git init命令后,Git仓库会生成一个.git目录,该目录包含了资源的所有元数据,其它的项目目录保持不变
  git clone 从现有Git仓库中拷贝项目
  所有的版本控制系统,其实只能跟踪文本文件的改动
  操作
  1、创建版本库git init
  .git目录是用来跟踪管理版本库的(也不一定要在空目录下创建,也可以选择一个已有东西的目录)
  在当前目录下创建一个文件test_git.txt,并编辑其内容,git add命令把文件添加到缓存,没有显示任何内容就对了
DSC0004.png

  2、git commit 把文件提交到仓库
DSC0005.png

  -m 后面是本次提交的说明,可以输任意内容,当然最好是有意义的
  1个文件被改动
  2行被内容被插入
  添加文件到git仓库,以上分两步先add后commit的原因是add可以多次添加文件,commit可以一次性把这些文件提交
  3、git status查看
  继续修改test_git.txt文件,内容如下:
DSC0006.png

  执行命令git status,该命令让我们时刻掌握仓库当前的状态
DSC0007.png

  上述命令告诉我们test_git.txt被修改过了,但还没有准备提交的修改
  执行git diff,该命令使我们查看具体修改的内容
DSC0008.png

  从以上结果看出我们在第一行添加了一个distributed
  知道了对test_git.txt作了什么修改后就放心了
  执行git add test_git.txt,依旧没有任何东西显示,接着我们再执行git status 查看当前仓库的状态
DSC0009.png

  git status告诉我们,将要提交被修改的包括test_git.txt,现在可以放心的提交了
  再把它提交到仓库
DSC00010.png

  1个文件被修改了    1行插入    1行删除
  提交后,执行git status命令查看仓库当前状态
DSC00011.png

  以上结果说明当前没有需要提交的修改,而且目录是干净的
  如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
  4、现继续修改test_git.txt,并执行git diff查看修改内容
DSC00012.png

  提交至仓库
DSC00013.png

  你可以不断的对文件进行修改,并不断的把它提交到版本库里,一旦你把文件改乱了或误删了,就可以恢复
  5、版本回退
  ///////////////////至此,我们已经提交了3个版本到仓库
  版本1:
  first test git:
  git is a version control system.
  git is free software.
  版本2:
  add distributed:
  git is a distributed version control system.
  git is free software.
  版本3:
  append GPL:
  git is a distributed version control system.
  git is free software distributed under the GPL.
  实际工作中我们不可能记得所有修改过的内容git log可以显示从最近到最远的提交日志
DSC00014.png

  如果嫌输出太多可加参数输出
DSC00015.png


  需要友情提示:类似59cbc12a...75263ee的是commit>
  为什么commit>  每提交一个新版本,实际上Git就会把他们自动串成一条线
  现在要把当前版本append GPL回退到上上一个版本first test git,可用git reset命令
  在Git中HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,上100个可写成HEAD~100
DSC00016.png

  此时我们执行git log可看到最新的两个版本不见了
DSC00017.png


  但是想要再回去已经回不去了,除非你的窗口还没关,往上找,找到那个add distributed和append GPL的commit>
DSC00018.png test_git的内容也是最新那个的版本:

DSC00019.png

  Git的版本回退速度非常快,这是因为在Git内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git只是把指针从append GPL指向test git first
  然后顺便把工作区的文件更新了
  其实Git是提供了一个命令git reflog来记录你的每一次命令
DSC00020.png 这样就算你关闭了窗口甚至电脑,也可以回退到未来那个版本

  HEAD指向的版本就是当前版本,Git允许我们使用git reset --hard commit_id在版本之间穿梭
  6、工作区和暂存区
  修改test_git.txt的内容,添加一个文件LICENSE
  再用git status查看
DSC00021.png

  以上告诉我们test_git.txt被修改,LICENSE从未被添加(Untracked)
  添加之后再用git status查看一下状态
DSC00022.png

DSC00023.png

  git add后添加到暂存区,git commit提交之后,暂存区就没有任何内容了,一旦提交且你没有对工作区做任何修改,那么工作区就是干净的
DSC00024.png

  7、Git管理的是修改,而不是文件
  修改文件test_git.txt,内容如下:
DSC00025.png

  然后git add test_git.txt进行添加
  再修改test_git.txt的内容,然后提交,查看状态:
DSC00026.png

DSC00027.png

DSC00028.png 发现第二次的修改并没有被提交,因为第二次修改后并没有add,所以只提交了第一次的修改

  执行git diff HEAD -- test_git.txt查看工作区和版本库中文件的区别
DSC00029.png

  发现第二次的确实没被提交,我们可以添加并提交第二次的修改
  8、撤销修改
  命令git checkout -- test_git.txt意思就是,把test_git.txt文件在工作区的修改全部撤销,这里有两种情况:
  一种是test_git.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  另一种是test_git.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  总之,就是让这个文件回到最近一次git commit或git add时的状态。
  如果你git add到暂存区后想要撤回,
  执行git reset HEAD test_git.txt 可以把暂存区的修改回退到工作区,
  此时用git status查看一下
DSC00030.png

  现在暂存区是干净的,还记得上述命令git checkout -- test_git.txt吗
DSC00031.png

  那如果你不但改错东西还提交到了版本库,怎么办?版本回退,
  不过是有条件的,就是你还没有把本地仓库推送到远程
  总结:1、如果改乱了工作区的某个文件内容,可执行git checkout -- file 丢弃工作区的内容
  2、如果不但改乱了工作区的某个文件内容保存到了暂存区,可执行git reset HEAD file,回到
  场景1,在按场景1的操作执行
  3、如果提交到了本地仓库,可利用版本回退,前提是没有推送到远程
  9、删除文件
  我们先添加一个文件tmp.txt 并提交
  然后在工作目录下直接rm tmp.txt,这个时候Git知道你删了文件,工作区和版本库就不一样了
  执行git status命令,Git会告诉你删除了一个文件
  现在你有以下两种做法:
  一种是真的要从版本库删除这个文件,执行命令git rm tmp.txt删掉,并执行git commit -m "remove tmp.txt"
  一种是误删的,还想要恢复到工作区,执行git checkout -- tmp.txt 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
  总结:git rm 用于删除一个文件。如果一个文件已经被提交到版本库,那么永远不用担心误删,
  但是你只能恢复文件到最新版本
  《完》


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588125-1-1.html 上篇帖子: 根据时间获取commit或者查看git log-11922981 下篇帖子: 在windows上,Git-2.9.3-rebase-i-64-bit安装和初始化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表