git 常用命令
2017-09-08 16:44
316 查看
Git 是什么?
revision control ,版本控制,分布式的。
工作区(Working Directory)与暂存区
**工作区**(Working Directory) ,就是本地工作目录, **版本库**(Repository),工作区有一个隐藏目录.git,这个`不算工作区,而是Git的版本库`。Git的版本库里存了很多东西,其中最重要的就是称为**stage(或者叫index)的暂存区**; 另外,Git为我们自动创建的第一个分支master,以及指向master的一个指针叫 HEAD。
把文件往Git版本库里添加的时候,是分两步执行的: 1. git add 把文件添加进去,实际上就是把文件修改添加到暂存区; 2. git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支,因为创建Git版本库时,Git自动创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。 可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的: **暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。**
git help -g git init # 初始化当前目录的项目,会建立 .git隐藏目录,保存元信息 git add . # 添加到 临时 索引库 git commit -m "submit message ,just a comment" # 永久添加到 索引库 git status # 查看暂存区状态 # Untracked --> git add git config --global core.editor vim git diff git diff --staged git commit -a # "-a"跳过"git add" git rm xxx.file git rm -f xxx #删除之前已修改,并提交至stage,-f 强制 git rm --cached xx.log # Untracked files git mv fromName toName #改名 git log -p -2 # -p展开显示每次提交的内容差异 -2仅显示最近两次更新 git help log git log --pretty=oneline git commit --amend #修改最后一次提交 ,提交完发现漏掉几个文件或提交注释有误 git reset HEAD xxx.file # "add *"后想取消特定文件的stage git checkout -- xxx.file #取消对文件的修改
远程仓库
#克隆 $ git clone git@github.com:elastic/elasticsearch.git #ssh $ git clone https://github.com/elastic/elasticsearch.git #http # 查看当前的远程仓库,默认用 origin 标识所克隆的原始仓库 $ git remote origin $ git remote -v #verbose origin https://github.com/elastic/elasticsearch.git (fetch) origin https://github.com/elastic/elasticsearch.git (push) #添加远程仓库 git remote add [shortname]小技巧
git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit git config --global alias.st status问题:怎么取得git 打好的tag所对应的代码呢?
先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。
但是这时候 git 可能会提示你当前处于一个“detached HEAD” 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:git checkout -b branch_name tag_name问题:怎么查询历史版本及回退
当在版本库中进行若干次修改提交后,可用 git log 查看历史记录——从最近到最远。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 –pretty=oneline 参数
一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
版本回退:
首先,Git必须知道当前版本是哪个版本,在Git中用 HEAD 表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
现在,要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用 git reset 命令:$ git reset --hard HEAD^ $ git reset --hard 3628164 #版本号没必要写全,前几位就可以了,Git会自动去找。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅修改HEAD指向 。
如果不知道具体的提交ID(commit ID),要怎么才能回退到特定的版本呢?
git reflog用来记录你的每一次命令:
小结:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令:git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。问题:git 双剑的异同 – merge vs rebase
问题:快捷键
加粗Ctrl + B
斜体Ctrl + I
引用Ctrl + Q
插入链接Ctrl + L
插入代码Ctrl + K
插入图片Ctrl + G
提升标题Ctrl + H
有序列表Ctrl + O
无序列表Ctrl + U
横线Ctrl + R
撤销Ctrl + Z
重做Ctrl + YMarkdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]" target=_blank>
#从远程仓库 抓取数据
$ git fetch [remote-name]
$ git pull
#推送 git push [remote-name] [local-branch-name] #
$ git push origin master # 克隆后本地默认master分支,远程origin
# --set-upstream origin v5.4.3
#查看远程仓库信息
$ git remote show [remote-name]
* remote origin
Fetch URL: https://github.com/elastic/elasticsearch.git Push URL: https://github.com/elastic/elasticsearch.git HEAD branch: master
Remote branches:
0.12 tracked
0.13 tracked
...
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (local out of date)
$ git tag
# 远程仓库删除 和 重命名
$ git remote rename [oldname] [newname]
$ git remote rm [name]
[/code]打标签
git tag #列已有 git tag -l 'v5.4*' #过滤 #标签分类:轻量级(lightweiht)、含附注(annotated) git tag -a v1.x -m "comment" #-a 标签类型 annotated , -m 标签说明 git show v1.x #查看标签版本信息 git push origin [tagname] #默认push不会把tag推送 git push origin --tags #一次推送所有tags小技巧
git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit git config --global alias.st status问题:怎么取得git 打好的tag所对应的代码呢?
先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。
但是这时候 git 可能会提示你当前处于一个“detached HEAD” 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:git checkout -b branch_name tag_name问题:怎么查询历史版本及回退
当在版本库中进行若干次修改提交后,可用 git log 查看历史记录——从最近到最远。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 –pretty=oneline 参数
一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
版本回退:
首先,Git必须知道当前版本是哪个版本,在Git中用 HEAD 表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
现在,要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用 git reset 命令:$ git reset --hard HEAD^ $ git reset --hard 3628164 #版本号没必要写全,前几位就可以了,Git会自动去找。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅修改HEAD指向 。
如果不知道具体的提交ID(commit ID),要怎么才能回退到特定的版本呢?
git reflog用来记录你的每一次命令:
小结:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令:git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。问题:git 双剑的异同 – merge vs rebase
问题:快捷键
加粗Ctrl + B
斜体Ctrl + I
引用Ctrl + Q
插入链接Ctrl + L
插入代码Ctrl + K
插入图片Ctrl + G
提升标题Ctrl + H
有序列表Ctrl + O
无序列表Ctrl + U
横线Ctrl + R
撤销Ctrl + Z
重做Ctrl + YMarkdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [url=https://zh.wikipedia.org/wiki/Markdown] [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个[url=http://www.csdn.net]链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
Markdown Extra 定义列表语法:项目1
项目2
定义 A
定义 B
项目3
定义 C
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:@requires_authorization def somefunc(param1='', param2=0): '''A docstring''' if param1 > param2: # interesting print 'Greater' return (param2 - param1 + 1) or None class SomeClass: pass >>> message = '''interpreter ... prompt'''
脚注
生成一个脚注1.目录
用[TOC]来生成目录:
Git 是什么
工作区Working Directory与暂存区
远程仓库
打标签
小技巧
问题怎么取得git 打好的tag所对应的代码呢
问题怎么查询历史版本及回退
问题git 双剑的异同 merge vs rebase
快捷键
Markdown及扩展
表格
定义列表
代码块
脚注
目录
数学公式
UML 图
离线写博客
浏览器兼容
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.行内公式,数学公式为:Γ(n)=(n−1)!∀n∈N。
块级公式:
x=−b±b2−4ac−−−−−−−√2a
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:Created with Raphaël 2.1.0张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。
或者流程图:
Created with Raphaël 2.1.0开始我的操作确认?结束yesno
关于 序列图 语法,参考 这儿,
关于 流程图 语法,参考 这儿.
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 [/i] 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。IE9以下不支持
IE9,10,11存在以下问题
不支持离线功能
IE9不支持文件导入导出
IE10不支持拖拽文件导入
这里是 脚注 的 内容. ↩