基本概念

Git 是一个分布式的版本管理工具,不同于perforce的是,他每个人都有一个完整的版本库,这种结构及其像bitcoin的原理。

工作区 Workplace

即文件夹所在的位置

索引区 Index(stage)

git add 提交到的区域,可以理解为缓存区

版本库 Repository

git commit 提交到的区域,即为本地Repository。即.git文件夹

stash

与perforce中shelve的概念非常相似

基本应用

创建一个Repository

  1. git init

添加文件到stage区

  1. git add readme.md

提交到版本库

  1. git commit -m new file

查看现有branch的状态

  1. git status

查看工作区中文件和版本库中区别

  1. git diff readme.md

查看commit历史记录

  1. git log
  2. git log --pretty=oneline
  3. git log --graph --pretty=oneline --abbrev-commit \\显示分支图

退回上一个版本

  1. git reset --hard HEAD^
  2. git reset --hard 3628164
  • 上一个版本就是HEAD比较容易数不过来,所以写成HEAD~100。

  • 当你用$ git reset —hard HEAD^回退到“add distributed”版本时,再想恢复到“append GPL”,就必须找到“append GPL”的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

  1. $ git reflog
  2. ea34578 HEAD@{0}: reset: moving to HEAD^
  3. 3628164 HEAD@{1}: commit: append GPL
  4. ea34578 HEAD@{2}: commit: add distributed
  5. cb926e7 HEAD@{3}: commit (initial): wrote a readme file

丢弃工作区的修改

  1. git checkout -- readme.md

注意:有无 “—” 是有区别的,没有表示切换branch

删除文件

  1. git rm readme.md
  2. git commit -m "remove file"

分支管理

git的分支与perforce的分支大不同,git的分支是基于类似于指针的方式来实现的,它是在创建不同的指针指向不同的commit版本

创建分支

  1. git checkout -b dev

上面的命令建立了dev分支并切换到dev,等同于如下:

  1. git branch dev
  2. git checkout dev

切换分支

  1. git checkout dev

查看分支

  1. git branch

删除分支

  1. git branch -d dev

合并分支

  1. git checkou master
  2. git merge dev

如果有冲突,git会标示在有冲突的文件中,按照如下格式

  1. Git tracks changes of files.
  2. <<<<<<< HEAD
  3. Creating a new branch is quick & simple.
  4. =======
  5. Creating a new branch is quick AND simple.
  6. >>>>>>> feature1

另外一种合并分支的方法是

  1. git merge --no-ff -m "merge with no-ff" dev

这种方法的不同是 合并会是一个新的commit, 而之前的只是简单的把master指向dev

远程管理

查看远程库信息

  1. git remote -v

推送分支

  1. git push origin master
  2. git push origin dev

获得分支

  1. git branch --set-upstream dev origin/dev \\第一次的时候需要关联本地和远程的分支
  2. git pull

在本地创建和远程分支对应的分支

  1. git checkout -b branch-name origin/branch-name

标签

添加标签

在某个分支上执行

  1. git tag v1.0
  2. git tag v1.0 6224799 \\commit id

查看标签

  1. git show v1.0

删除标签

  1. git tag -d v0.1

reset 某个文件

  1. 首先查看该文件的历史版本信息:git log Default@2x.png

  2. 记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926

  3. 恢复该文件:git reset 9aa51d89799716aa68cff3f30c26f8815408e926 Default@2x.png

  4. 提交git:git commit -m “revert old file”

清理大binary

  1. git filter-branch --tree-filter 'rm -f livebiz-transcode' HEAD