基本概念
Git 是一个分布式的版本管理工具,不同于perforce的是,他每个人都有一个完整的版本库,这种结构及其像bitcoin的原理。
工作区 Workplace
即文件夹所在的位置
索引区 Index(stage)
git add 提交到的区域,可以理解为缓存区
版本库 Repository
git commit 提交到的区域,即为本地Repository。即.git文件夹
stash
与perforce中shelve的概念非常相似
基本应用
创建一个Repository
git init
添加文件到stage区
git add readme.md
提交到版本库
git commit -m “new file”
查看现有branch的状态
git status
查看工作区中文件和版本库中区别
git diff readme.md
查看commit历史记录
git loggit log --pretty=onelinegit log --graph --pretty=oneline --abbrev-commit \\显示分支图
退回上一个版本
git reset --hard HEAD^git reset --hard 3628164
上一个版本就是HEAD比较容易数不过来,所以写成HEAD~100。
当你用$ git reset —hard HEAD^回退到“add distributed”版本时,再想恢复到“append GPL”,就必须找到“append GPL”的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflogea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file
丢弃工作区的修改
git checkout -- readme.md
注意:有无 “—” 是有区别的,没有表示切换branch
删除文件
git rm readme.mdgit commit -m "remove file"
分支管理
git的分支与perforce的分支大不同,git的分支是基于类似于指针的方式来实现的,它是在创建不同的指针指向不同的commit版本
创建分支
git checkout -b dev
上面的命令建立了dev分支并切换到dev,等同于如下:
git branch devgit checkout dev
切换分支
git checkout dev
查看分支
git branch
删除分支
git branch -d dev
合并分支
git checkou mastergit merge dev
如果有冲突,git会标示在有冲突的文件中,按照如下格式
Git tracks changes of files.<<<<<<< HEADCreating a new branch is quick & simple.=======Creating a new branch is quick AND simple.>>>>>>> feature1
另外一种合并分支的方法是
git merge --no-ff -m "merge with no-ff" dev
这种方法的不同是 合并会是一个新的commit, 而之前的只是简单的把master指向dev
远程管理
查看远程库信息
git remote -v
推送分支
git push origin mastergit push origin dev
获得分支
git branch --set-upstream dev origin/dev \\第一次的时候需要关联本地和远程的分支git pull
在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
标签
添加标签
在某个分支上执行
git tag v1.0git tag v1.0 6224799 \\commit id
查看标签
git show v1.0
删除标签
git tag -d v0.1
reset 某个文件
首先查看该文件的历史版本信息:git log Default@2x.png
记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926
恢复该文件:git reset 9aa51d89799716aa68cff3f30c26f8815408e926 Default@2x.png
提交git:git commit -m “revert old file”
清理大binary
git filter-branch --tree-filter 'rm -f livebiz-transcode' HEAD
