Stash
创建SSH Key
关于秘钥,如果~/.ssh里面没有key的话,参照如下方法:
- ssh-keygen -t rsa -C "your_email@example.com"
2.一直按回车
(在输入passphrase的时候也可以输入密码,但为了之后免密码操作,需要将本地的秘钥添加到ssh agent中,使用的命令:
ssh-add .ssh/id_rsa
)
3.pbcopy < ~/.ssh/id_rsa.pub 复制即可
其中配置参照了:https://www.jianshu.com/p/ddd3122cb351
Git
迄今为止,最酷的教程
http://pcottle.github.com/learnGitBranching/?demo
Git 基本命令
-
克隆代码库
git clone ssh://git@git.sankuai.com/web/www.git # 其中www是要克隆的版本库,其它如mining, stat, mtpay等。美团的代码库暂时不是全开放的,需要申请访问权限。
git clone ssh://git@git.sankuai.com/web/www.git mt # mt是指定克隆到的目录名,其他和上一个命令一样 -
更新代码库到最新版本
git pull -
查看工作区状态
git status -
提交代码到本地仓库
git add template/deal/default.php # 添加文件到暂存区
git commit -m "update deal ui" -
推送到远程仓库
git pull # 更新代码库到最新版本
git push # 开始推送
git push origin master # 对新建远程仓库的第一次推送,需要指定主分支名master -
暂存区操作
git add template/deal/default.php # 提交文件到暂存区
git reset HEAD template/deal/default.php # 删除暂存区中的文件 -
查看代码改动
git diff # 查看工作区与暂存区的文件差异
git diff --cached # 查看暂存区与最后一次本地提交的文件差异
git diff HEAD # 工作区与最后一次本地提交之间的差异
git diff origin # 工作区与本地仓库原始版本比较 -
查看提交记录日志
git log # 查看默认格式的提交记录
git log -5 # 查看最近5条提交记录
git log -p # 查看提交记录并显示代码改动内容
git log -p --author=abc # 查看abc的提交记录并显示代码改动内容
git log --since=2011-05-24 --until=2011-05-25 # 查看从2011-05-24到2011-05-25的提交
git log --name-only # 只显示文件名
git log --pretty=oneline # 只显示一行
git log --pretty=format:%h:%s # 自定义格式
git log --graph # 图形化查看
git log --stat # 查看修改文件统计 -
文件操作
git checkout file # 检出最后一次提交的文件覆盖当前文件,或者说放弃当前文件的修改
git rm file # 删除文件
git mv file1 file2 # 移动或者重命名文件
分支和合并命令
-
创建分支
git branch hotfix # 方法1,直接从当前分支创建hotfix分支
git checkout -b hotfix # 方法2,从当前分支创建hotfix分支,并切换到hotfix分支
git checkout -b hotfix master # 方法3,从master分支创建hotfix分支,并切换到hotfix分支 -
切换分支
git checkout hotfix # 切换到hotfix分支
git checkout master # 切换到master分支 -
分之合并
git merge hotfix # 合并hotfix分支到当前分支,使当前分支拥有hotfix分支的改动
git merge hotfix --squash # 合并hotfix分支到当前分支,但将分支上的提交压缩,然后手工提交变成一次提交。
git merge origin/master # 合并远程的master分支到当前分支 -
变基分支
git rebase master # 将当前分支的修改重新变基到master分支上
git rebase --on-to <new_base> <current_base> # 将当前分支在<current_base>基础上的修改变基到<new_base>分支上 -
分支管理
git branch # 查看所有的分支,带*号的是当前所在分支
git branch -d hotfix # 删除hotfix分支
git branch -D hotfix # 强制删除hotfix分支
git branch --merged # 查看与当前分支合并过的分支,只要合并过的分支即使删掉也不用担心
git branch --no-merged # 查看与当前分支没有合并过的分支 -
远程分支
git push origin abc # 将本地分支abc保存到远程
git push origin :abc # 将远程分支abc删除
git branch -a #查看目录下的所有分支
在www仓库约定只有以自己名字开头的分支才能新增和删除,比如对于panweizeng来说
git push origin panweizeng/abc # OK
git push origin fudongping/abc # FAIL
GitWorkingFlow
从master分支建立develop分支,然后在develop分支上进行开发。
git checkout master # 切换到master分支
git checkout -b develop # 从master创建develop分支,并切换到该分支
git commit -m "fix bug 1" # 修复了bug1
git commit -m "fix bug 2" # 修复了bug2
在develop开发已经完毕(修复bug或者添加新特性),这时从develop创建mirror分支。
git checkout -b mirror # 从develop创建mirror分支,并切换到该分支
更新master到最新,把master的代码更新合并到mirror。如果有冲突,请解决冲突后提交。
git checkout master
git pull # 更新master到最新
git checkout mirror
git merge master # 合并master到mirror
把mirror分支的代码更新合并到master,然后推送到远程
git checkout master
git merge mirror --squash # 压缩合并mirror分支上的代码更新
git commit -a -m 'xxxx' #注意需要进行一次提交
git push # 推送到远程
特点
- 单主分支结构,即远程和本地都以master作为主分支,工程师在develop分支上开发
- 本地master作为远程master和本地develop的桥梁,主要做pull和push的操作,保证和远程master同步
- develop开发完成后,从develop创建mirror用于合并master上最新的改动,合并成功(可能要解决冲突)后,再在master上合并mirror分支并push到远程
- 发布脚本更新发布机器上的master到最新版本,建立master的发布tag,然后开始线上部署
- 线上代码稳定后,删除develop和mirror分支
注意事项
- 不要在master上进行开发,master分支是连接远程代码库和本地分支的桥梁,桥梁的功能只有一个就是连接;
- mirror分支的作用是,如果合并发生冲突,可以保留一份干净的副本,如果改动很小,这个分支也可以不要;
- develop和mirror分支的名字只要是非master的任意名字都可以,比如hotfix, new-mobile等等;
Git开发与上线流程
Git开发
1.从master创建开发分支并提交修改
git checkout master
git pull # 切换到master,并更新到最新
git checkout -b develop # 创建develop分支,并切换到此分支
vim && rm && ... # 任意发挥,随意修改添加代码
git add ...(modified files) # 添加修改后的代码文件
git commit -m "some things" # 提交修改至develop分支
webreview username #提交review,例如webreview weiziqian,会自动生成review页面并邮件通知
#或者使用stash,创建远程开发分支,然后checkout,开发完后使用pull request提交review
Git上线
1.如果修改范围很大,则需要创建合并分支;否则此部分可以忽略
git checkout -b mirror # 从develop创建mirror分支,并切换到该分支
2.在镜像分支上合并修改
git checkout master
git pull # 首先切换并更新master到最新
git checkout mirror
git merge master # 合并master到mirror;如果冲突需解决冲突
3.提交合并后的代码
git checkout master
git merge mirror --squash # 压缩合并mirror分支上的代码
git commit -m 'things again' # 提交至master分支
网友评论