您的位置:首页 > 其它

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 + Y


Markdown及扩展

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 + Y


Markdown及扩展

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
可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元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不支持拖拽文件导入

这里是 脚注 的 内容.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git 版本控制