转载请标明出处 http://blog.csdn.net/wzhwcp/article/details/69668716 本文出自:【wzhwcp的博客】
git
1.git基本概念
1.1基本概述
git 采用的是分布式仓库,本地和远程仓库都是一个包含完整记录的仓库,如果某一处被格式化了,还以从另一个仓库获取,并不会有大影响(只要之前进行了同步仓库)。git 可以在断网的情况下,提交到本地仓库,之后联网再推到远程仓库。每次提交或者保存,git都会记录下所有文件状态,若未改变的文件,git不会再次存储,只会链接到之前已经存储的文件。
1.2状态
git文件一共有四种状态:
* Untracked 新建的文件,git仓库中没跟踪的
以下为git中存在的,并在跟踪的
* Unmodified 和仓库文件对比没修改过的
* Modified 修过的
* Staged 提交之前的状态(执行commit之后,会将处在这个状态下的文件,commit到版本库中)
2.忽略文件
创建本地.gitignore
* touch .gitignore 不commit在本地用,也可以commit到仓库和别人一起分享
创建一个global .gitignore
* git config --global core.excludesfile ~/.gitignore_global
每个Git repository项目都可以用这个rules
* 这里可以看到相关规则a Gist containing some good rules
指定仓库排除
* 不用创建.gitignore 只用在本地生成的文件.git/info/exclude中添加规则,这里添加的规则并不会被checked in,并且也只对本地repository生效
3.比较不同
git diff
- Modified 状态的文件与State状态的文件compares
- git diff -stated (stated换成cached,它两是同义词)
- State状态下的文件与last commit状态compares
4.提交文件
- git commit
- 弹出默认的或者你配置的编辑器进行提交信息编辑
git commit -m flag
- 这种是比较简便的方式,eg:
git commit -m "Story 182: Fix benchmarks for speed"
git commit -a
- 如果有很多处于Modify状态的文件,一个个add到state状态太麻烦,可以直接加-a,自动加到state,并全部提交
这里遇到一个问题:当我不修改系统默认的提交信息时(或者只是换行不输入任何信息),然后关掉编辑器会出现提交不成功,并会提示
Aborting commit due to empty commit message.
解决方法:必须输入新的提交信息,即在原来的基础上,至少要加入新的行数据。
5.移除文件
- git rm
- 移除文件,git不再对其跟踪,并从磁盘删除
- git rm –cached file
- 从git中删除,但保留在本地磁盘
- git rm log/*.log
- 删除log/目录下以.log结尾的文件,即后面可以加一些表达式eg:
git rm \*~
删除所有以~这个结尾的文件
6.移动文件
- git mv file_from file_to
- 将文件重新命名,并处于state状态
7.参看提交历史
- git log 显示检验码、作者、日期、提交信息
- git log -p -2 显示每个提交修改的补丁 限定两个
- git log –stat 显示多少文件修改,增加或减少多少行
- git log –pretty=oneline(short、full、fulller) 输出更粗略的的信息
- git log –pretty=format:”%h - %an, %ar : %s” 精简格式化输出,更多参数详见:Table 1. Useful options for git log –pretty=format
- git log –pretty=format:”%h %s” –graph (graph以图表显示详细的branch和merge历史)更多的选项命令详见:Table 2. Common options to git log
限定输出
* git log –since=2.weeks 最后两周提交
* git log -Sfunction_name 最后一次匹配的增加或移除提交
更多限定
Table 3. Options to limit the output of git log
8.撤销相关:
参考至:Git Basics - Undoing Things
* git commit –amend
* 当执行了commit之后,commit信息不完整、或者有文件还处在Modified 状态,需要在上一个commit下提交,那么就需要执行次命令,然后将文件add到state area,最后再提交,此提交会覆盖上一次提交
`eg
$ git commit -m ‘initial commit’
$ git add forgotten_file
$ git commit –amend`
- git reset HEAD README.md
- 将处于state area 的文件移除撑modified文件
- git checkout –README.md
- 将处于Modified的文件恢复成到上一次commit状态 (注意:这是修改的内容将会被删除,更好的方法是用Git Branching)
9.与远程仓库对接
展示仓库名
git remote (- v 列出URLS)
- 列出你指定的远程仓库名,如果当前仓库是cloned下来的,至少可以看到origin,我们可以用这些名字,很方便的进行pull和push
git remote add
- 添加一个以shortname为引用的远程仓库
fetch、pull、push
* git fetch[remote-name]
* 获取你本地没有的数据,并且不会与你编辑过的文件合并,只能手动进行合并;还可以获取所有的分支引用,进行合并和检查。
* git pull
* 如果目前分支有建立起远程仓库追踪(如:gitclone url),那么pull则会获取数据并自动和编辑过的文件进行合并。
* git push [remote-name] [branch-name]
eg `git push origin master`
(==注==:origin 是用git clone到本地之后,自动命名,如果在你push之前,有人先push了,那么push会失败,必须fetch下来合并,并且运行起来,才能在push)
- git remote show [remote-name]
- 检查远程仓库、将会展示追踪的分支消息、同时也会提示,当本地运行git pull和git push会进行啥操作
- git remote rename pb paul
- 重命名
- git remote remove [remote-name]
- 移除镜像
10.Tagging
- git tag 列出所有标记列表
- git tag -l “v1.8.5*” 列出指定匹配模式的标记
10.1 轻量(lightweight)标记
指定一个提交(commit)点作为tag,并不保存额外的信息、
- git tag v1.4-lw
- git show v1.4-lw 并不展示额外的信息
10.2 注解(Annotated)标记
包含tagger 名字、邮箱、日期、tagging msg等信息
- git tag -a v1.4 -m “my version 1.4”
-m 指定标记消息,若没有,系统会自动采用默认的编辑器
给之前提交(commit)加上tag
- git log –pretty=oneline 看之前的提交历史
- git tag -a v1.2 9fceb02 根据提交的校验和添加tag
分享tags
默认情况下,git push 并不会将本地的tag,push到远程服务器上,用以下两个命令行推到远程仓库上
- git push origin v1.5 指定一个tag到远程仓库上
- git push origin –tags 将所有的tag推到远程仓库
检出Tags
必须新建一个分支,然后将要检出的tags,指定到这新分支上
* git checkout -b [branchname] [tagname]
* git checkout -b version2 v2.0.0
11.别名(Aliases)
为了是命令更简单、更容易明白和操作,可以给命令添加别名如下:
* 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 ci可以
可视化命令 gitk