[关闭]
@octopus 2016-09-23T02:34:07.000000Z 字数 3352 阅读 967

git 学习笔记

git


git 的本地操作

- 安装 git

(win版已上传于百度网盘 "软件 "文件夹下)

  1. // 设置全局用户名与邮箱
  2. $ git config --global user.name "Your Name"
  3. $ git config --global user.email "email@example.com"

- git 对象

git 使用hash来标识对象。

- 创建仓库

  1. $ git init dirname // 创建文件夹并创建git所需文件(.git文件夹下)
  2. $ git init // 直接在当前目录创建git所需文件(.git文件夹下)
  3. $ git clone dirname // 克隆本地仓库
  4. $ git clone http://xxx // 克隆远程仓库

- git 工作流程

工作区 --> 暂存区 --> 历史仓库区

常用命令:

  1. $ git add // 添加到暂存区
  2. $ git commit // 讲暂存区文件提交到历史仓库区
  3. $ git status // 查看状态
  4. $ git rm // 删除工作区文件和暂存区文件
  5. $ git mv // 更改路径,重命名
  6. $ vim .gitignore // 忽略某些文件的更新

git rm

  1. $ git rm a // 删除工作区的文件 a,commit提交后删除历史区的a
  2. $ git rm --cached b // 删除暂存区的文件 b


git mv

git mv 其实帮我们封装了一系列操作,比较原生 mv 如下


git add -A

git add -A 添加全部文件到暂存区


.gitignore 文件

在 git 仓库根目录编辑 .gitignore 文件,加入正则匹配的文件名,就会忽略那些不需要被追踪的文件。

  1. // vim .gitignore 加入:
  2. *.txt

再对 .txt 结尾的文件进行一系列操作就不会在暂存区有提示了

.gitignore 定义规则:

  1. 1. 空行会被忽略。
  2. 2. #开头的行用于注释。
  3. 3. 一个简单文件名将匹配任何目录中的同名文件。
  4. 4. 目录名以/ 结尾将匹配同名的目录和子目录,但不匹配文件。
  5. 5. * 通配符匹配,但是不能跨目录匹配。
  6. 6. !开头表示取反。

- git 本地分支与合并

深层原理请看原理章节

  1. $ git branch // 创建分支
  2. $ git checkout // 切换到分支
  3. $ git tag // 打标签
  4. $ git stash // 保存快照
  5. $ git merge // 合并分支

git tag

  • 回退到某个 commit 要看历史记录,然后获取 hash 来回退,若我们有某个固定 commit 需要常常修改,就可以打上tag,像切换分支一样简单的回退到这个 tag 版本。
  • tag 又分为轻量级标签和带注释的标签,轻量级标签仅仅在本地生效,带注释的标签可以作为 tag 对象保存在仓库,可以提交到远程共享,所以建议创建带注释的标签
  1. $ git log --oneline --graph --all --decorate // 查看 commit,详情查看一下一节
  2. * d44f9fa (HEAD, dev) test2
  3. * e9d3d25 test1
  4. * 7d51990 (master) old2
  5. * 37dae18 old1
  6. // 轻量级标签
  7. $ git tag "v0" e9d3d25 // 给 hash 为 e9d3d25 的 commit 打上标签
  8. $ git tag // 若不写 hash 则默认为当前分支的当前commit创建
  9. // 带注释的标签
  10. $ git tag -a "V0" 37dae18 -m "v0 tag" // 给 37dae18 为 e9d3d25 的 commit 打上标签 'V0'
  11. //查看所有标签
  12. $ git tag
  13. // 切到某 tag 下
  14. $git checkout v1

默认情况下,’git push’命令不会将标签上传到远程服务器上。为了共享这些标签,你必须在’git push’命令后明确添加-tags选项,如果有人克隆或者在线同步你的git仓库的话,标签也会一并同步了。

  1. $ git push tags

git stash

git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。

  1. $ git stash save -a "stash" // 保存当前分支(dev)的快照并注释
  2. $ git checkout master // 切到 master 解决问题
  3. $ git checkout dev // 切回来
  4. $ git stash list // 查看快照列表
  5. $ git pop --index stash@{0} // 弹出快照并加载,--index 用来还原暂存区
  6. $ git stash apply --index stash@{0} // 加载快照但不弹出(也就是不删除)
  7. $ git stash drop stash@{0} // 删除快照stash@{0}
  8. $ git stash clear // 一次清除所有快照

git merge

  1. $ git merge dev
  2. (显示冲突的文件...)
  3. $ git merge --abort // 取消 merge
  4. // 处理冲突
  5. $ vim 1.txt
  6. $ git commit -m "xxx"

- 查看与对比历史记录

git log

查看 commit 历史记录

  1. $ git log --oneline --graph --all --decorate
  2. // --oneline 表示在一行显示主要信息
  3. // --decorate 显示每个commit的引用(如:分支、tag等)
  4. // --graph标记会画出一个ASCII图展示commit历史的分支结构. 通常和--oneline --decorate结合使用:
  5. $ git log -3
  6. // -n来限制输出的数量. /下上面的例子只显示最近3个commit.
  7. git log --after="2014-7-1" --before="2014-7-4"
  8. // 按照日期筛选

git show

显示git对象的详细信息,所以不仅可以显示commit对象信息,还可以显示 tree,tag 等等对象信息

  1. $ git show master
  1. $ git show a42f886
  1. $ git show --oneline master
  1. $ git show --stat master

git diff

  1. // 显示工作区与暂存区的差异
  2. $ git diff
  3. // 显示暂存区与历史区的差异
  4. $ git diff --catched
  5. // 显示两个版本之间的差异
  6. $ git diff master dev
  7. // 显示两个版本针对某文件的差异
  8. $ git diff master dev -- 1.txt
  9. // 以不同颜色显示不同
  10. $ git diff --word-diff

- 重写历史记录

  1. $ git checkout
  2. $ git commit --amend
  3. $ git rebase
  4. $ git reset
  5. $ git reflog

git checkout

  1. // 更新HEAD以指向branch分支,以及用branch 指向的树更新暂存区和工作区。
  2. $ git checkout branch
  3. // 汇总显示工作区、暂存区与HEAD的差异。
  4. $ git checkout
  5. // 用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改。
  6. $ git checkout -- filename
  7. // 维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工作区中相 应的文件。注意会将暂存区和工作区中的filename文件直接覆盖。
  8. $ git checkout branch -- filename

git commit --amend

替换上一次的提交信息


git rebase

相关文章


- 杂项

给长命令起别名

如给 git log 命令起别名为 lol

  1. git config --global alias.lol "git log --oneline --graph --all --decorate"

git 远程协作

git 内部原理

原文链接,等待搬运...
分支与Tag原理,等待搬运...

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注