git常用命令汇总
简介
git是由linux之父Linus自己用C写的一个分布式版本控制系统。目地是为了管理Linux。
安装
window
linux
版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建版本库
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
$ mkdir test
$ cd test
//初始化版本库
$ git init
初始完成后目录下会出现 .git 目录。这个目录千万不要随便更改,它是git用于跟踪管理版本库的;
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
提交文件到版本库
提交改变到版本库:
$ git add . //表示添加所有文件到暂存区
$ git add test.txt //test.txt是test文件夹下的的一个文件
$ git commit -m "这是一次提交" //提交改变,并添加提交说明
git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
取消已经在暂存区的文件
$ git reset HEAD filename
git reset HEAD one.txt
取消对文件的修改
$ git checkout -- filen
查看版本库状态
可以查看是否有文件变更的状态,比如是否加入暂存区,是否加入暂存区后没有提交
$ git status
我门修改test.txt文件后查看状态的结果:
查看具体的文件变更信息
$ git diff test.txt //test.txt为想要查看的文件
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff --cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff --stat
查看版本提交日志
$ git log
很长的一段十六进制是commit id(版本号)
如果感觉打印的内容太多可以加上参数 --pretty=online
结果:
查看历史提交记录
即使做了版本回退也可以通过本命令找到提交版本id,从而回退到某个版本
$ git reflog
版本回退
在git中:HEAD 表示当前版本,HEAD^ 表示上一个版本 HEAD^^ 上上一个版本,以此类推,当回退版本比较多时可以用HEAD~100 表示回退到上一百个版本
$ git reset --hard HEAD^ //回退到上一个版本
也可以通过commit id(版本号)进行回退
$ git reset --hard 版本号 //版本号很长,只需要前几位就行,git会自动为我们匹配
删除文件
$ rm test.txt //从本地工作区删除
$ git rm test.txt //从暂存区和本地中删除,以后不会再跟踪此文件
$ git rm --cache [filename] //从暂存区中删除,不会从本地删除
$ git commit -m "delete a file" //提交改变
忽略某些文件
可以创建一个名为 .gitignore文件,用来添加忽略文件的模式
.gitignore 的格式规范如下:
- 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 星号(*)匹配零个或多个任意字符;
- [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
- 问号(?)只匹配一个任意字符;
- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
- 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
例子:
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
远程仓库
查看当前的远程库
$ git remote
$ git remote -v //显示对应的克隆地址
添加远程仓库
$ git remote add [shortname] [url]
从远程仓库抓取数据
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据
$ git fetch [remote-name]
fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
推送数据到远程仓库
$ git push [remote-name] [branch-name]
例:
$ git push origin master
查看远程仓库信息
$ git remote show [remote-name]
远程仓库的删除和重命名
重命名
$ git remote rename oldname newname
删除
$ git remote rm remote-name
标签
查看所有标签
$ git tag
查看一个标签
$ git show tagname
新建标签
//含附注的标签
$ git tag -a tagname -m state
//轻量级标签
$ git tag tagname
将标签推送到远程仓库
//在推送时添加标签
$ git push [remote-name] [branch-name] [tag-name]
//在推送之后添加标签
$ git push [remote-name] [tag-name]
//一次推送所有标签
$ git push [remote-name] --tags