本篇笔记参考廖雪峰的git教程,为方便查看将命令部分提取并记录下来。

无意对原作的版权侵犯,如需要学习请到廖雪峰网站学习git

创建git仓库

  1. # mkdir learngit && cd learngit
  2. # git init

添加一个文件 readme.txt 内容如下:

  1. Git is a version control system.
  2. Git is free software.

将修改的文件加入git缓存

  1. # git add readme.txt

然后将缓存提交到本地仓库

  1. git commit -m "wrote a readme file"
  2. [master (root-commit) cb926e7] wrote a readme file
  3. file changed, insertions(+)
  4. create mode readme.txt

修改readme.txt文件

  1. Git is a distributed version control system.
  2. Git is free software distributed under the GPL.

然后尝试提交:

  1. $ git add readme.txt
  2. $ git commit -m "append GPL"
  3. [master ] append GPL
  4. file changed, insertion(+), deletion(-)

修改readme.txt文件,改成如下内容:

  1. Git is a distributed version control system.
  2. Git is free software.

运行 git status 查看git状态

  1. # git status
  2. # On branch master
  3. # Changes not staged for commit:
  4. # (use "git add <file>..." to update what will be committed)
  5. # (use "git checkout -- <file>..." to discard changes in working directory)
  6. #
  7. # modified: readme.txt
  8. #
  9. no changes added to commit (use "git add" and/or "git commit -a")

可以看到readme.txt被修改,查看修改的具体内容

  1. # git diff readme.txt
  2. diff --git a/readme.txt b/readme.txt
  3. index 46d49bf..9247db6
  4. --- a/readme.txt
  5. +++ b/readme.txt
  6. @@ -, +, @@
  7. -Git is a version control system.
  8. +Git is a distributed version control system.
  9. Git is free software.

说明:

git diff        #是工作区(work dict)和暂存区(Stage)的比较

git diff --cached             #是暂存区(Stage)和分支(Master)的比较

提交修改到缓存中

  1. # git add readme.txt

我们再运行git status看看当前仓库的状态

  1. # git status
  2. # On branch master
  3. # Changes to be committed:
  4. # (use "git reset HEAD <file>..." to unstage)
  5. #
  6. # modified: readme.txt
  7. #

依然是readme.txt被修改,此时可以放心提交到仓库

  1. # git commit -m "add distributed"
  2. [master ea34578] add distributed
  3. file changed, insertion(+), deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

  1. # git status
  2. # On branch master
  3. nothing to commit (working directory clean)

现在有三个版本:

版本1:wrote a readme file

  1. Git is a version control system.
  2. Git is free software.

版本2:add distributed

  1. Git is a distributed version control system.
  2. Git is free software.

版本3:append GPL

  1. Git is a distributed version control system.
  2. Git is free software distributed under the GPL.

使用 git log 查看历史版本

  1. $ git log
  2. commit 3628164fb26d48395383f8f31179f24e0882e1e0
  3. Author: Michael Liao <askxuefeng@gmail.com>
  4. Date: Tue Aug :: +
  5.  
  6. append GPL
  7.  
  8. commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
  9. Author: Michael Liao <askxuefeng@gmail.com>
  10. Date: Tue Aug :: +
  11.  
  12. add distributed
  13.  
  14. commit cb926e7ea50ad11b8f9e909c05226233bf755030
  15. Author: Michael Liao <askxuefeng@gmail.com>
  16. Date: Mon Aug :: +
  17.  
  18. wrote a readme file

加上--pretty=oneline参数可以只输出摘要信息

  1. $ git log --pretty=oneline
  2. 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
  3. ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
  4. cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

像 3628164fb26d48395383f8f31179f24e0882e1e0 称为 commit ID ,用于代表某个版本,通过他可以回退版本

假如现在想要回退到  add distributed  时的状态:

  1. $ git reset --hard ea34578d5496d7dd233c827ed32a8cd576c5ee85

如果你保证commit ID前5位唯一,也可以简写:

  1. $ git reset --hard ea3457

或者使用 HEAD^ 代表HEAD指针指向上一个版本:

  1. git reset --hard HEAD^

说明:

版本回退后,即HEAD指针指向上个版本HEAD^

如果想指向上上个版本用:HEAD^^      ,以此类推

如果想指向上100个版本用: HEAD~100

现在已经成功回退到 add distributed 状态了,此时查看log

  1. $ git log
  2. commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
  3. Author: Michael Liao <askxuefeng@gmail.com>
  4. Date: Tue Aug :: +
  5.  
  6. add distributed
  7.  
  8. commit cb926e7ea50ad11b8f9e909c05226233bf755030
  9. Author: Michael Liao <askxuefeng@gmail.com>
  10. Date: Mon Aug :: +
  11.  
  12. wrote a readme file

最新的那个版本append GPL已经看不到了!,而现在又想恢复到那个最新的版本方法如下:

方法一:如果终端没关,向上翻记录找到最新版本的coommit ID号

  1. $ git reset --hard
  2. HEAD is now at append GPL

方法二:如果终端关了,查看git历史操作寻找新版本的commit ID号

  1. $ git reflog
  2. ea34578 HEAD@{}: reset: moving to HEAD^
  3. HEAD@{}: commit: append GPL
  4. ea34578 HEAD@{}: commit: add distributed
  5. cb926e7 HEAD@{}: commit (initial): wrote a readme file

方法三:如果历史操作也被其他操作覆盖记录了,查看历史所有版本号

  1. $ git log --graph --pretty=format:'%h -%d %s (%cr)' --abbrev-commit --reflog

现在既可以向后回退,也可以向前恢复,只要有COMMIT ID号即可,查看当前状态号

  1. $ git rev-parse HEAD

假如当前提交了多个文件a b c,现在只想恢复文件c的上次状态,其他文件a 和 b保持当前状态

  1. $ git checkout HEAD^ -- c

或者

  1. $ git checkout HEAD^ c

解决fatal:remote error:You can't push to git://github.com/username/*.git问题的办法

今天Git push的时候,发现没有push权限

  1. fatal:remote error:
  2. You can't push to git://github.com/username/*.git
  3. Use git@github.com:username/*.git

解决方法:

  1. git remote rm origin
  2. git remote add origin git@github.com:username/resname.git

https://git-scm.com/blog

本篇笔记参考廖雪峰的git教程,为方便查看将命令部分提取并记录下来。

无意对原作的版权侵犯,如需要学习请到廖雪峰网站学习git

git的简单玩法的更多相关文章

  1. Git的入门级玩法

    作为一个还没有实际开发经验的程序员,对于版本控制多少有些陌生,我通常的做法就是项目名后面加数字标记版本,然后备注一个文档说明更新.据个人了解svn用的比较多,我也学习了一点,无非是本地下载一个服务器端 ...

  2. git分布式版本控制玩法

    git分布式版本控制玩法 Git distributed version control play github的配置安装步骤:1.下载git bash(从http://www.git-scm.com ...

  3. SVN和git的使用(附github的简单玩法)

    今天简单的总结了下SVN和git的使用,也尝试了下github,应该好好提高下自己的英文水平了,梦想有一天不再使用任何翻译软件. [svn]:集中式的代码管理工具(版本控制工具--版本记录) 1> ...

  4. [置顶] Git 配置SSH简单玩法?

    > 第一步下载git点击直接下载 他会检测您的系统当前是64bit还是32bit安装过程不再啰嗦反正就是Next Next Next Finish 第二步这里你可以下载TortoiseGit点击 ...

  5. 简单Elixir游戏服设计-玩法simple_poker

    上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...

  6. 简单Elixir游戏服设计- 游戏玩法介绍

    抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...

  7. openresty+lua在反向代理服务中的玩法

    openresty+lua在反向代理服务中的玩法 phith0n · 2015/06/02 10:35 0x01 起因 几天前学弟给我介绍他用nginx搭建的反代,代理了谷歌和维基百科. 由此我想到了 ...

  8. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  9. 十五天精通WCF——第九天 高级玩法之自定义Behavior

    终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...

随机推荐

  1. Nload(CentOS网速的实时监控)

    Nload(CentOS网速的实时监控)的安装和安装过程中的问题 I. 安装 Download the latest rpmforge-release rpm from wget ftp://ftp. ...

  2. Mathematica 11.1.0 下载及注册流程

    新版本注册机: http://files.cnblogs.com/files/dabaopku/Mathematica_11.1.0_Keygen.exe.zip 类似于11.0, 在控制台运行, 比 ...

  3. Android内存泄漏杂谈

    内存泄漏:是指内存得不到GC的及时回收,从而造成内存占用过多.从而导致程序Crash,也就是常说的OOM. 一.static 先来看以下一段代码 public class DBHelper { pri ...

  4. Python定期删除文件、整理文件夹

    1.根据传入的参数,文件所在目录,匹配文件的正则表达式,过期天数进行删除,这些可写在配置文件del_file.conf. del_file3.py #!/usr/bin/env python # en ...

  5. Java自定义注解的使用

    什么是注解? #============================================================================================ ...

  6. 使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  7. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari

    一.集群软硬件环境准备: 操作系统:  centos 7 x86_64.1804 Ambari版本:2.7.0 HDP版本:3.0.0 HAWQ版本:2.3.05台PC作为工作站: ep-bd01 e ...

  8. 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题

    之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...

  9. Linux 文件系统剖析

    [转自]https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 按照分层结构讨论 Linux 文件系统 在文件系统方面,Linu ...

  10. Chrome Google浏览器下载

    https://support.google.com/chrome/answer/95346?co=GENIE.Platform%3DDesktop&hl=zh-Hans    下载和安装 G ...