@octopus
2016-09-23T10:34:07.000000Z
字数 3352
阅读 1066
git
(win版已上传于百度网盘 "软件 "文件夹下)
// 设置全局用户名与邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
git 使用hash来标识对象。
$ git init dirname // 创建文件夹并创建git所需文件(.git文件夹下)
$ git init // 直接在当前目录创建git所需文件(.git文件夹下)
$ git clone dirname // 克隆本地仓库
$ git clone http://xxx // 克隆远程仓库
工作区 --> 暂存区 --> 历史仓库区
常用命令:
$ git add // 添加到暂存区
$ git commit // 讲暂存区文件提交到历史仓库区
$ git status // 查看状态
$ git rm // 删除工作区文件和暂存区文件
$ git mv // 更改路径,重命名
$ vim .gitignore // 忽略某些文件的更新
$ git rm a // 删除工作区的文件 a,commit提交后删除历史区的a
$ git rm --cached b // 删除暂存区的文件 b
git mv
其实帮我们封装了一系列操作,比较原生mv
如下
git add -A
添加全部文件到暂存区
在 git 仓库根目录编辑 .gitignore 文件,加入正则匹配的文件名,就会忽略那些不需要被追踪的文件。
// vim .gitignore 加入:
*.txt
再对 .txt 结尾的文件进行一系列操作就不会在暂存区有提示了
.gitignore 定义规则:
1. 空行会被忽略。
2. #开头的行用于注释。
3. 一个简单文件名将匹配任何目录中的同名文件。
4. 目录名以/ 结尾将匹配同名的目录和子目录,但不匹配文件。
5. * 通配符匹配,但是不能跨目录匹配。
6. !开头表示取反。
深层原理请看原理章节
$ git branch // 创建分支
$ git checkout // 切换到分支
$ git tag // 打标签
$ git stash // 保存快照
$ git merge // 合并分支
- 回退到某个 commit 要看历史记录,然后获取
hash
来回退,若我们有某个固定 commit 需要常常修改,就可以打上tag,像切换分支一样简单的回退到这个tag
版本。tag
又分为轻量级标签和带注释的标签,轻量级标签仅仅在本地生效,带注释的标签可以作为tag
对象保存在仓库,可以提交到远程共享,所以建议创建带注释的标签
$ git log --oneline --graph --all --decorate // 查看 commit,详情查看一下一节
* d44f9fa (HEAD, dev) test2
* e9d3d25 test1
* 7d51990 (master) old2
* 37dae18 old1
// 轻量级标签
$ git tag "v0" e9d3d25 // 给 hash 为 e9d3d25 的 commit 打上标签
$ git tag // 若不写 hash 则默认为当前分支的当前commit创建
// 带注释的标签
$ git tag -a "V0" 37dae18 -m "v0 tag" // 给 37dae18 为 e9d3d25 的 commit 打上标签 'V0'
//查看所有标签
$ git tag
// 切到某 tag 下
$git checkout v1
默认情况下,’git push’命令不会将标签上传到远程服务器上。为了共享这些标签,你必须在’git push’命令后明确添加-tags选项,如果有人克隆或者在线同步你的git仓库的话,标签也会一并同步了。
$ git push –tags
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。
$ git stash save -a "stash" // 保存当前分支(dev)的快照并注释
$ git checkout master // 切到 master 解决问题
$ git checkout dev // 切回来
$ git stash list // 查看快照列表
$ git pop --index stash@{0} // 弹出快照并加载,--index 用来还原暂存区
$ git stash apply --index stash@{0} // 加载快照但不弹出(也就是不删除)
$ git stash drop stash@{0} // 删除快照stash@{0}
$ git stash clear // 一次清除所有快照
$ git merge dev
(显示冲突的文件...)
$ git merge --abort // 取消 merge
// 处理冲突
$ vim 1.txt
$ git commit -m "xxx"
查看 commit 历史记录
$ git log --oneline --graph --all --decorate
// --oneline 表示在一行显示主要信息
// --decorate 显示每个commit的引用(如:分支、tag等)
// --graph标记会画出一个ASCII图展示commit历史的分支结构. 通常和--oneline --decorate结合使用:
$ git log -3
// -n来限制输出的数量. /下上面的例子只显示最近3个commit.
git log --after="2014-7-1" --before="2014-7-4"
// 按照日期筛选
显示git对象的详细信息,所以不仅可以显示commit对象信息,还可以显示 tree,tag 等等对象信息
$ git show master
$ git show a42f886
$ git show --oneline master
$ git show --stat master
// 显示工作区与暂存区的差异
$ git diff
// 显示暂存区与历史区的差异
$ git diff --catched
// 显示两个版本之间的差异
$ git diff master dev
// 显示两个版本针对某文件的差异
$ git diff master dev -- 1.txt
// 以不同颜色显示不同
$ git diff --word-diff
$ git checkout
$ git commit --amend
$ git rebase
$ git reset
$ git reflog
// 更新HEAD以指向branch分支,以及用branch 指向的树更新暂存区和工作区。
$ git checkout branch
// 汇总显示工作区、暂存区与HEAD的差异。
$ git checkout
// 用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改。
$ git checkout -- filename
// 维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工作区中相 应的文件。注意会将暂存区和工作区中的filename文件直接覆盖。
$ git checkout branch -- filename
替换上一次的提交信息
如给 git log
命令起别名为 lol
git config --global alias.lol "git log --oneline --graph --all --decorate"