git 进阶

一.
gitconfigglobaluser.nameYourName git config –global user.email “[email protected]
二.
git init。
git add
git commit -m “something”
三.
git status
git diff file 查看工作区改动,不包括暂存区
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
四.
HEAD指向当前版本
git reset –hard commit_id
(reset
hard 常用,本地跟暂存区 都跟版本库一样,有风险,全覆盖!
soft 暂存区保持现状,版本库回滚
mixed 本地保持现状,版本库回滚
)
git log 查看历史commit (reset 以后就看不到新版本的commit,也就看不到commit_id)
git reflog 看到所有记录(good)
五.
工作区 working directory
暂存区 stage
分支
六.
git checkout file 从工作区撤销
git reset HEAD file 从stage撤销到工作区
commit 的话就版本回退
七.
删除文件
工作区的被删除了 版本库还有
确实要删除,git rm file git commit -m “delete a file”
误删, git checkout – file
git checkout其实是用版本库里的版本替换工作区的版本,无论工作 区是修改还是删除,都可以“一键还原”
八.
ssh 安全协议
ssh-keygen -t rsa 生成ssh密钥对,私钥不公开, 公钥随便晒
九.
采用https 协议需要每次push输入用户密码
ssh 则不用,不过要添加ssh 密钥到远程库
十.
添加远程库 git remote add origin(远程库名字) url (https or git)
首次git push -u origin master
后来git push
十一.
上面是先又本地再有远程,通常是先有远程再有本地
每个协作开发者 git clone 一份即可
git默认使用ssh协议(速度更快,需开放端口)https也可以,慢,需要每次输入账号密码
十二. 分支管理
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。

但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
因为git分支就是指针指来指去

git checkout -b dev(分支名字) -b 表示创建并切换
相当于git branch dev git checkout dev
git branch 查看所有分支 当前分支前会带*
git merge dev 将dev分支的工作成果合并到master(当前分支)
合并后就可以删除分支了 git branch -d dev
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全
fast-forward 这个合并是快进模式,即合并速度非常快,还有其他合并方式
建立分支必须先从master 更新代码再切过来,很重要!!!
十三. 解决冲突
合并之后有冲突就修改以后重新add commit
git log –graph 命令可以看到分支合并图
十四. 分支管理策略
master 是稳定的,发版前合并dev分支
各分支开发不断合并到dev

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

十五. Bug 分支
就是开一个分支来修改bug
如果是紧急bug ,当前开发分支工作未完成可以先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop 恢复工作现场

十六. feature 分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

删除分支 git branch -d name 强制删除未merge的分支 -D
删除远端分支 git push origin –delete branch_name
十七. 多人协作
git push 如果推送失败,需要先git pull 解决冲突
如果pull 失败(no tracking information)就是本地分支和远程分支链接关系没有创建,git branch –set-upstream branch-name origin/branch-name
再push就ok了

十八. 标签管理
标签就是容易找的commit (commit_id 记不得) 写版本号
默认标签是打在最新提交的commit上的git tag 也可以指定一个commit id
git tag -a -m ‘blablabla…’ 可以指定标签信息
git tag -s -m ‘blablald’ 可以用PGP签名标签
git tag 可以查看所有标签
十九. 操作标签
命令git push origin 可以推送一个本地标签;
命令git push origin –tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。
二十. 使用github
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
可以推送pull request给官方仓库来贡献代码
二十一 配置git
git config –global color.ui true 修改颜色
二十二 .gitignore 文件
https://github.com/github/gitignore 所有配置文件
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
二十三. 配置别名
git config –global alias.st status
git config –global alias.co checkout
git config –global alias.ci commit
git config –global alias.br branch
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”
配置文件在 .git/config 和 ~/.gitconfig 可以直接修改
二十四. 搭建git服务器
搭建Git服务器非常简单,通常10分钟即可完成;
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。

你可能感兴趣的:(git)