git的简单玩法
本篇笔记参考廖雪峰的git教程,为方便查看将命令部分提取并记录下来。
创建git仓库
# mkdir learngit && cd learngit
# git init
添加一个文件 readme.txt 内容如下:
Git is a version control system.
Git is free software.
将修改的文件加入git缓存
# git add readme.txt
然后将缓存提交到本地仓库
git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
file changed, insertions(+)
create mode readme.txt
修改readme.txt文件
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交:
$ git add readme.txt
$ git commit -m "append GPL"
[master ] append GPL
file changed, insertion(+), deletion(-)
修改readme.txt文件,改成如下内容:
Git is a distributed version control system.
Git is free software.
运行 git status 查看git状态
# git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
可以看到readme.txt被修改,查看修改的具体内容
# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6
--- a/readme.txt
+++ b/readme.txt
@@ -, +, @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
说明:
git diff #是工作区(work dict)和暂存区(Stage)的比较
git diff --cached #是暂存区(Stage)和分支(Master)的比较
提交修改到缓存中
# git add readme.txt
我们再运行git status
看看当前仓库的状态
# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
依然是readme.txt被修改,此时可以放心提交到仓库
# git commit -m "add distributed"
[master ea34578] add distributed
file changed, insertion(+), deletion(-)
提交后,我们再用git status
命令看看仓库的当前状态:
# git status
# On branch master
nothing to commit (working directory clean)
现在有三个版本:
版本1:wrote a readme file
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 查看历史版本
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug :: + append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug :: + add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug :: + wrote a readme file
加上--pretty=oneline
参数可以只输出摘要信息
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
像 3628164fb26d48395383f8f31179f24e0882e1e0 称为 commit ID ,用于代表某个版本,通过他可以回退版本
假如现在想要回退到 add distributed 时的状态:
$ git reset --hard ea34578d5496d7dd233c827ed32a8cd576c5ee85
如果你保证commit ID前5位唯一,也可以简写:
$ git reset --hard ea3457
或者使用 HEAD^ 代表HEAD指针指向上一个版本:
git reset --hard HEAD^
说明:
版本回退后,即HEAD指针指向上个版本HEAD^
如果想指向上上个版本用:HEAD^^ ,以此类推
如果想指向上100个版本用: HEAD~100
现在已经成功回退到 add distributed 状态了,此时查看log
$ git log
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug :: + add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug :: + wrote a readme file
最新的那个版本append GPL
已经看不到了!,而现在又想恢复到那个最新的版本方法如下:
方法一:如果终端没关,向上翻记录找到最新版本的coommit ID号
$ git reset --hard
HEAD is now at append GPL
方法二:如果终端关了,查看git历史操作寻找新版本的commit ID号
$ git reflog
ea34578 HEAD@{}: reset: moving to HEAD^
HEAD@{}: commit: append GPL
ea34578 HEAD@{}: commit: add distributed
cb926e7 HEAD@{}: commit (initial): wrote a readme file
方法三:如果历史操作也被其他操作覆盖记录了,查看历史所有版本号
$ git log --graph --pretty=format:'%h -%d %s (%cr)' --abbrev-commit --reflog
现在既可以向后回退,也可以向前恢复,只要有COMMIT ID号即可,查看当前状态号
$ git rev-parse HEAD
假如当前提交了多个文件a b c,现在只想恢复文件c的上次状态,其他文件a 和 b保持当前状态
$ git checkout HEAD^ -- c
或者
$ git checkout HEAD^ c
解决fatal:remote error:You can't push to git://github.com/username/*.git问题的办法
今天Git push的时候,发现没有push权限
fatal:remote error:
You can't push to git://github.com/username/*.git
Use git@github.com:username/*.git
解决方法:
git remote rm origin
git remote add origin git@github.com:username/resname.git
本篇笔记参考廖雪峰的git教程,为方便查看将命令部分提取并记录下来。
git的简单玩法的更多相关文章
- Git的入门级玩法
作为一个还没有实际开发经验的程序员,对于版本控制多少有些陌生,我通常的做法就是项目名后面加数字标记版本,然后备注一个文档说明更新.据个人了解svn用的比较多,我也学习了一点,无非是本地下载一个服务器端 ...
- git分布式版本控制玩法
git分布式版本控制玩法 Git distributed version control play github的配置安装步骤:1.下载git bash(从http://www.git-scm.com ...
- SVN和git的使用(附github的简单玩法)
今天简单的总结了下SVN和git的使用,也尝试了下github,应该好好提高下自己的英文水平了,梦想有一天不再使用任何翻译软件. [svn]:集中式的代码管理工具(版本控制工具--版本记录) 1> ...
- [置顶]
Git 配置SSH简单玩法?
> 第一步下载git点击直接下载 他会检测您的系统当前是64bit还是32bit安装过程不再啰嗦反正就是Next Next Next Finish 第二步这里你可以下载TortoiseGit点击 ...
- 简单Elixir游戏服设计-玩法simple_poker
上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...
- 简单Elixir游戏服设计- 游戏玩法介绍
抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...
- openresty+lua在反向代理服务中的玩法
openresty+lua在反向代理服务中的玩法 phith0n · 2015/06/02 10:35 0x01 起因 几天前学弟给我介绍他用nginx搭建的反代,代理了谷歌和维基百科. 由此我想到了 ...
- [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法
1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...
- 十五天精通WCF——第九天 高级玩法之自定义Behavior
终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...
随机推荐
- 深入理解JVM虚拟机:(一)Java运行时数据区域
概述 JVM是Java语言的精髓所在,因为它Java语言实现了跨平台运行,以及自动内存管理机制等,本文将从概念上介绍JVM内存的各个区域,说明个区域的作用. JVM运行时数据区模型 Java虚拟机在执 ...
- 【Spark深入学习 -16】官网学习SparkSQL
----本节内容-------1.概览 1.1 Spark SQL 1.2 DatSets和DataFrame2.动手干活 2.1 契入点:SparkSess ...
- sed用法去除行首和行末的中括号
sed去掉行首和行末的中括号: sed -i 's:^\[::; s:\]$::;' newtrace_nlp.log.2018-08-02.bak 其余可依次类推.
- 匿名函数gc分析
测试一:使用member function创建action会产生gc,不管该函数是否访问外部变量: private System.Action memberAct = null; // gc 112B ...
- git clone 后误删除了分离出来的文件怎么恢复?
git clone 后,会分离出项目的文件. 误删除了,可以使用以下命令恢复: #先检查一下git状态 git status #通过如下命令重新分离出文件 git checkout -f HEAD
- 【转】Linux netstat命令详解,高级面试必备
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...
- java字符串池和字符串堆内存分配
1. String str=new String("abc")和String str="abc"的字符串“abc”都是存放在堆中,而不是存在 栈中. 2. 其实 ...
- SQL查询无限层级结构的所有下级,所有上级
无限层级结构的table1表,Id(主键),ParentId(父级id)查询某个Id的所有下级或所有上级,使用WITH AS,UNION ALL 查询 1.查询Id为1所有的下级 WITH T AS( ...
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案. P ...
- 【CF434E】Furukawa Nagisa's Tree 点分治
[CF434E]Furukawa Nagisa's Tree 题意:一棵n个点的树,点有点权.定义$G(a,b)$表示:我们将树上从a走到b经过的点都拿出来,设这些点的点权分别为$z_0,z_1... ...