@spiritnotes
2016-02-02T13:53:50.000000Z
字数 2620
阅读 1440
Git
SVN等版本管理是集中式的,其特点是必须联网才能使用,而分布式中每个人的电脑就是一个完整的版本库。分布式中通过推送来将自己的修改共享给其他人。而实际使用往往还是有一个版本库,充当服务器的角色。
工作区: 本地目录
版本库: .git隐藏文件夹
暂存区: 也叫索引index,通过git add可以将文件添加进暂存区,而git commit实际上是将暂存区的内容提交到分支
git diff 默认为工作区和暂存区比较
git diff HEAD 工作区和版本库master分支比较
git checkout -- file: 使文件回到最后一次git commit或者git add时的状态,也即是如果暂存区有内容回到暂存区,否则回到分支HEAD,--用以区分切换分支命令,丢弃工作区的修改
git reset HEAD file:把暂存区内该文件撤销掉,丢弃缓冲区的修改,工作区维持不变
git rm file:从工作区和暂存区中删除该文件,commit后从版本库中删除
HEAD 表示当前版本,最新的提交版本
HEAD^ 表示上一版本
HEAD^^ 上上版本
HEAD~100 表示100次前
git reset --hard HEAD^,内部机理,直接移动HEAD指针,更新工作区文件,该操作后,其之后的commit记录在git log中无法找到
git reflog 纪录每一次命令,可以找到回退前的log纪录
分支是对版本库内的commit记录时间线相关的
- 创建分支非常块,相当于直接创建一个指针指向一个commit对象
git checkout -b newbranch
git branch newbranch
- 切换分支,相当于将HEAD指针指向新的分支最新commit
git checkout newbranch
- 分支切换后,会将工作区更新到新分支的commit状态
- 如果当前分支有未提交修改(工作区或者暂存区),均会提示有未提交内容,请确
- 查看当前分支
git branch
- 合并分支
git merge otherbranch
- 删除分支
git branch -d newbranch
git merge feature1
如果有冲突则需要对冲突文件进行再修改,然后add,commit
git log --graph --pretty=oneline --abbrev-commit
Fast forward下,删除分支则会丢失分支信息,
可以关掉fast forward模式: git merge --no-ff -m "merge with no-ff" dev
git stach: 将当前的工作区和暂存区保存起来,工作区和暂存区恢复成初始状态
git stach list: 查看保存的stach
git stach pop:恢复最近的stach并删除该stach
git stach apply stash@{0}:恢复某stach
git stach drop stash@{0}:删除某stach
标签是版本库的快照,是指向某个commit的指针,与分支类似,不同点在于分支可以移动,标签不可以
git tag tagname 打标签
git tag 查看所有标签
git tag tagname SHA1.. 对某次commit打标签
git show tagname 查看某次标签内容
git tag -a tagname -m "tagname created" 打标签附带消息
git tag -d tagname 删除标签
git push origin tagname 推送标签
git push origin --tags 一次推送所有标签
git push origin :refs/tags/tagname 远程删除标签
git remote add origin git@github.com:spiritwiki/study.git
git push -u origin master
git clone git@github.com:spiritwiki/study.git
克隆时会将本地的master分支和远程的master分支对应起来,并且远程仓库的默认名字是origin,需要其他分支则需要后续创建
git checkout -b dev origin/dev
git remote -v 查看远程库信息
git config --global color.ui true
git config --global user.name yourname
git config --global user.email youremail@gmail.com
可以在该文件中添加忽略文件,支持通配符
git config --global alias.st status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"