转载请标明出处 http://www.jianshu.com/p/680757564abe 本文出自:【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> <url>
- 添加一个以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
网友评论