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

[经验分享] git基础知识

[复制链接]
YunVN网友  发表于 2018-9-17 10:27:39 |阅读模式
  本文没啥难度,基本上是我照着廖雪峰的博客敲的代码,权当做篇学习笔记。
git基础知识
  git diff example.txt
  git add example.txt
  git commit -m 'addby XXXX'
  git status
  git log[--pretty=online]
  
  
  windows上安装git客户端,到官网下载即可。
  安装完成后,在开始--> GitBash ,输入下面的内容:
  git config --global user.name'lirl'
  git config --global user.email'lirulei90@126.com'
  mkdir testgit
  cd testgit/
  git init
  Initialized empty Gitrepository in D:/testgit/.git/
  编辑一个readme.txt,放到D:/testgit/目录下
DSC0000.png

  git add readme.txt
  git commit -m 'add one file'
  如下图:
DSC0001.png

  然后,随便修改下这个readme.txt,
DSC0002.png

  然后再次执行git status
DSC0003.png

  上图最后一行的提示告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
  执行git diff readme.txt
DSC0004.png

  上图的绿色的就是现在的文件内容。
  知道哪里修改后,我们心里有数后,就可以提交了。
  git add readme.txt
  git commit -m 'third'
  git status
DSC0005.png

DSC0006.png

  上图的git告诉我们,当前没有需要提交的修改,而且工作目录是干净的。
  然后我们执行git log 看下修改的历史记录。
DSC0007.png

  git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是third,上一次是add distributed,最早的一次是wrote a readme file。
  如果觉得输出界面太杂乱,可以加上--pretty=oneline参数,如下图:
DSC0008.png


  前半截的十六进制字符串是commit>  然后,我们再演示一下回滚操作,
  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
  如下表示回到上一版本:
  git reset --hard HEAD^
DSC0009.png

  回滚完成后,可以直接执行cat命令查看readme.txt的文件内容,如下图,文件内容已经回到上一版本了:
DSC00010.png

  git log 再次看下有哪些版本
DSC00011.png

  最新的那个版本'third' 已经看不到了!想再回去已经回不去了,肿么办?

  办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个commit>  如下执行:
  git reset --hard dcb953c4e8c  # 版本号没必要写全,前几位就可以了,Git会自动去找
  git log 再次查看如下图,发现刚才的哪个版本已经回来了:
DSC00012.png

  cat readme.txt 可以发现文件内容已经恢复了。
DSC00013.png

  git reflog   # 可以查看所有分支的所有操作记录。包括(包括commit和reset的操作),包括已经被删除的commit记录。【常用于重返未来】
DSC00014.png

  可以找到以前commit的记录,就可以回去了。
  git reset --hard 760aa48  会退到这个版本
  cat readme.txt
DSC00015.png

  linux上安装git客户端(本地模式)
  yum install git -y
  其他操作和winrdows上的一样。
  
  首先添加个git用户名和邮箱,多用户的话,建议下面方式
  gitconfig --localuser.name 'lirl'
  gitconfig --localuser.email 'lirulei90@126.com'
  假如,原有一个文件提交过的readme.txt。后来做了些修改,并新添加一个issue的文件。
  然后执行git status,如下图:
DSC00016.png

  git add readme.txt
  git add issue
  git status
DSC00017.png

  git commit -m 'v4'  提交
  
  git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
  git status
DSC00018.png

DSC00019.png

  git的工作流程如下:
DSC00020.png

DSC00021.png

  管理修改
  第一次修改 -> git add -> 第二次修改 -> git commit
  你看,我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
  撤销修改
  假如文件错误加了一行"Fuck stupid boss"则恢复的方法如下:
  git checkout -- xx.txt
  命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
  一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  总之,就是让这个文件回到最近一次git commit或git add时的状态。
  如果文件还没有git add xx.txt ,则checkout操作能回到修改前的版本(回到git commit版本)
  如果git add xx.txt已经执行过来,则即便checkout也只能回到添加到暂存区的版本(回到git add版本)。回到老版本需要如下操作:
  echo 'stupid boss' >> issue  模拟文件被错误的修改了
  git add issue
DSC00022.png

  git reset HEAD issue
DSC00023.png

  git status
DSC00024.png

  git checkout -- issue
  cat issue
DSC00025.png

  git status
DSC00026.png

  cat issue
DSC00027.png

  小结
  场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
  场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file_name,就回到了场景1,第二步按场景1操作。
  场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
  删除文件
  git add passwd
  git commit -m 'add a passwd'
  git status
DSC00028.png

  rm -f passwd  模拟删除操作
  git status DSC00029.png
  可以看到git发现passwd这个文件被删除了。同时给出了提示可以执行git rm 或者git checkout
  假如我们确实是要删除,则执行下述操作:
  git rm passwd
  git status
  git commit -m 'rm passwd'
  git status
DSC00030.png

  假如我们要恢复文件,则执行下述操作:
  git checkout -- passwd 即可完成文件的恢复
DSC00031.png

  git checkout其实是用版本库里的版本替换了工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。


运维网声明 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-588202-1-1.html 上篇帖子: Linux环境下git客户端的安装、配置及基本用法 下篇帖子: Git 的 .gitignore 配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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