2015-09-27 git学习
创建
初始化
git init Initialized empty Git repository in <file>
关联
git remote add origin <git@server-name:path/repo-name.git>
克隆:
git clone <git@server-name:path/repo-name.git>
从已有远程库中拷贝
查看
状态日志
git status
提交内容日志
git log
分支合并日志
git log --graph
操作步骤日志
git reflog
差异日志
git diff
远程库信息
git remote -v
提交&撤销
提交
提交代码更改分两个阶段:
- 从工作目录,提交到stage;
- 从stage提交到master;
从工作目录提交到stage
- 新增
单个文件:git add <file>
多个文件:git add -A
- 删除
单个文件:git rm <file>
多个文件:git rm -A
只提交到stage,而没有提交到master,是不会自动同步到master的
- 新增
从stage提交到master
git commit
退回
退回也是要分两步:
- 从master退回到stage;
- 从stage退回到工作目录;
- 对于还没有提交到stage的
单个文件:git checkout --<file>
多个文件:git checkout master/develop
退回一步取stage中的文件状态,覆盖掉工作目录中文件的状态,跟master完全没关系。
- 对于已经到达stage的
单个文件:git reset HEAD file
多个文件:git reset HEAD^
把state中的文件状态用master中的覆盖掉,这样就把stage中修改用master的状态覆盖掉了,完全跟工作目录没关系
更新
第一次推送
git push -u origin master
推送最新修改
git push origin master
分支
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
合并分支时,如果可能,Git会用
Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息
git merge --no-ff -m "merge with no-ff" <name>
因为本次合并要创建一个新的commit,所以加上
-m
参数,把commit描述写进去
推送分支
git push origin <master>
git rebase与git marge的差异
将当前分支更新为最新的目标分支分支
git rebase <origin>
应用修改提交
git rebaes --continue
终止流程
git rebaes --abort
跳过此版本
丢弃本地修改,慎用
git rebaes --skip
删除分支:
git branch -d <name>
bug分支
储藏
git stash
将目前当所有修改用油纸包起来,快速地将工作环境恢复到上一个commit时的状态
并不是不想提交,而是工作进行到一半,线上缺陷来了,没法提交
- 线上缺陷储藏步骤
git stash //储藏现有工作分支(一般为develop)
git checkout <master> //切换至master分支
git checkout -b <issus-911> //在master分支上创建issus-911分支
git add <fix.java> //添加缺陷修改文件
git commit -m <"fix bug 911"> //提交缺陷修改文件
git checkout <master> //切换回master分支
git merge --no-ff <issus-911> //将issus-911分支合并至master
git checkout <develop> //切换至develop分支
git merge --no-ff <issus-911> //将issus-911分支合并至develop
查看储藏
git stash list
恢复储藏
git stash apply <stash@{0}>
删除储藏
git stash drop
恢复并删除储藏
git stash pop
feature分支
- 新feature开发步骤
git checkout -b <new feature 119> //在develop分支上创建issus-911分支
git add <feature.java> //添加新文件
git commit -m <"new feature 119"> //提交新文件
git checkout <develop> //切换至develop分支
git merge --no-ff <new feature 119> //将new feature119分支合并至develop
git branck -d <new feature 119> //将new feature119
标签
查看标签
git tag
创建标签
git tag <v1.0>
别名
命令嫌太长了,可以取个别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
浮生潦草闲愁广,一听啤酒一口尽