git的学习(一)
换了新工作,一直没时间写博客,怠惰啊,新工作用的GIT,这里,写一下GIT的一些学习记录
git与其他版本控制的比较
之前一直使用的是SVN,当服务器an宕机,会产生问题
使用git可以避免
git是基于快照流,其他 的是文件变更列表
git的三种状态
committed modified staged
对应三个工作区域:Git仓库 工作目录 暂存区域
工作流程:修改->暂存->提交
git安装
使用前配置
配置分三级,对应不同的位置:/etc/gitconfig->系统上所有用户
~/.gitconfig 或 ~/.config/git/config 文件->当前用户
仓库的 Git 目录中的 config 文件(就是 .git/config)->该仓库
每一级别和i覆盖上一级别 git会查找最后的变量配置值
查看配置的值:git config
获取git仓库与更新仓库
git init 初始化仓库
git add 跟踪文件
git rm 从跟踪文件中移除文件 -f 强制移除 –cached 移除暂存区的文件
git mv 移动文件
git commit 提交 -m 解释
-a 跳过暂存区域,直接将跟踪过的文件暂存起来并提交git clone url 文件目录 克隆到指定目录下
git status 查看文件状态
git status –short / -s 查看文件状态 M(left) 修改放入暂存区 M(right)修改未放入暂存区
A 新添加到暂存区 ??未跟踪的文件git diff 查看未暂存的文件更新了哪些部分,比较的是工作目录中当前文件与暂存区域快照之间的差异
git diff –cached /–staged 查看已暂存的将要下次提交的内容
忽略文件
创建一个名为 .gitignore 的文件
.gitignore的规范:
+ 所有空行或者以 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
glob匹配:
(*)匹配零个或多个
[abc] 匹配任何一个括号中的字符
(?)匹配一个任意字符
[0-9] - 匹配一个范围
a/**/z 匹配任意中间目录
案例:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
查看提交历史
git log 按提交时间(最新的在上面)列出所有更新(SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明)
git log -p -2 -p 显示每次提交的内容差异 -2 最近2次 -(n) 显示最近的n条提交历史
git log –stat 可以查看每次提交简略的统计信息
git log –pretty=oneline/short/full/fuller/format: 提交历史的显示格式 –graph 显示 ASCII 图形表示的分支合并历史
git log –since=2.weeks 近2周的提交历史 –after 指定时间之后 –until –before 制定时间之前
–author 显示指定作者的提交 –committer 与提交者相关的提交
–grep 查找关键字
–all-match 需要同时满足两个条件时需要加
-S 显示添加或者移除某个关键字的提交
git log 选项的最后指定它们的路径 某个目录或文件的提交历史
提交与撤销
git commit –amend 重新提交 第二次提交将代替第一次提交
git reset HEAD … 取消暂存
git checkout –… 撤销修改,会复制一个新的文件并覆盖源文件
远程仓库
git remote 查看远程仓库服务器的简写(默认名字为origin)
-v 显示服务器简写与URL
show 显示更多信息
rename 修改远程仓库的简写名
rm 移除远程仓库git remote add 添加一个远程仓库
git fetch [remote-name] 抓取远程仓库的数据 不会自动合并或修改当前的工作
git pull [remote-name] 抓取数据 并自动尝试合并到当前的分支
git push [remote-name] [branch-name] 推送到远程仓库 先拉取后推送
打标签
git可以给历史中某一提交打上标签,以表示重要,一般用来标记发布节点
git tag 以字母顺序列出标签 git tag -l ‘v1.8.5*’
git tag -a v1.4 -m ‘my version 1.4’ 创建附注标签 -m 选项指定了一条将会存储在标签中的信息
git tag v1.4-lw 创建轻量标签
git tag -a v1.2 9fceb02 可以根据某次提交的校验和(或部分校验和)补打标签
git push 默认不会推送标签到共享服务器 git push origin [tagname] / git push origin –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