[关闭]
@spiritnotes 2016-02-02T13:53:50.000000Z 字数 2620 阅读 1284

Git学习记录

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:把暂存区内该文件撤销掉,丢弃缓冲区的修改,工作区维持不变

reset 和 checkout 差别

删除文件

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下,删除分支则会丢失分支信息,
可以关掉fast forward模式: git merge --no-ff -m "merge with no-ff" dev

stach

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

git config --global color.ui true
git config --global user.name yourname
git config --global user.email youremail@gmail.com

.gitignore

可以在该文件中添加忽略文件,支持通配符

配置别名

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"

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