1 操作
1.1 clone项目
git clone git@example.com:project-name.git
1.2 进入代码目录
-
cd gitlab-help
1.3 本地新建文件
-
touch README.md // 接下来修改代码
-
git add README.md // 添加,准备提交
-
git commit -m “add README” // 提交到开发分支
-
git push -u origin master // 将开发分支提交到服务器
1.4 创建本地分支
(小驼峰式命名法,比如zyHighway,不要使用特殊字符):
查看所有分支
-
git branch
创建本地分支
-
git checkout -b $feature_name
git checkout 命令加上 –b 参数表示创建并切换
git checkout -b name
等同于
git branch name
git checkout name
切换分支
-
git checkout $fenzhiname
创建远程origin的dev分支到本地,这个命令创建本地dev分支:
-
$ git checkout -b dev origin/dev
遇到开发到半截,代码还不能正常运行,不想提交暂存,就不能 checkout 到别的分支。此时就可以用 stash,将现有工作区暂存起来,就可以 checkout 到别的分支工作了
git stash
临时工作完成之后,恢复到之前工作到半截的界面
git stash list //查看所有的暂存列表
git stash apply //恢复
git stash drop //删除
或者
git stash pop //恢复并删除
1.5 撤销修改
-
$ git checkout — readme.txt
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
1.6 版本回退
-
$ git reset –hard commit_id
-
$ git reset –hard HEAD^
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,
commit_id可以指定回到未来的某个版本.
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
1.7 删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
-
$ rm test.txt
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:(我现实使用 git 版本 2.10.1 git rm 和 rm 可以达到同样的效果,都可以从版本库删除文件)
-
$ git rm test.txt
rm 'test.txt'
-
$ git commit -m “remove test.txt”
[master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt
现在,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有,可以把误删的文件恢复到最新版本:
-
$ git checkout — test.txt
git checkout 是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
# 删除 untracked files
-
git clean -f
# 连 untracked 的目录也一起删掉
-
git clean -fd
# 连 gitignore 的 untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
-
git clean -xfd
# 在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
-
git clean -nxf
git clean -nf
git clean -nfd
1.8 提交到本地库
写代码,将写好的代码提交到本地库中:
-
git commit -m “My feature is ready” -file
-
git commit –a //提交全部改动过的文件
1.9 提交到远程分支
-
$ git push origin master
如果要推送其他分支,比如dev,就改成:
-
$ git push origin dev
本地分支名称hyhTestDemo和远程端口名称testDemo不一样时
-
$ git push origin HEAD:testDemo
远程dev分支不存在时,第一次push
git push –set-upstream origin dev
1.10 删除分支
-
$ git branch –d TestDemo
强制删除
-
$ git branch -D TestDemo
1.11 合并分支
同一分支会自动合并;
不同分支需要申请合并;
在Gitlab的提交页面,查看自己提交的代码;
提交一个合并请求;
管理员审核代码,决定是否合并代码到主分支上。
或者本地操作,合并自己的分支到master上
切换到master分支
$ git checkout master
合并你的分支到master
$ git merge yourbranch
解决冲突:
查看冲突信息,
$ git status
手动解决冲突文件后,add
$ git add filename
都处理后,在查看一下,没问题了就可以commit
$ git status
$ git commit
在Mac也可以使用git mergetool,在终端直接处理冲突
本地分支修改后,需要获取远程分支进行本地合并,可以使用 pull ,也可以使用 fetch 来获取
pull : 包括 fetch 和 自动的 merge fetch: 只是单纯的获取,获取后可以使用 diff 查看差别,再决定是否 merge
1.12 多人协作操作分支
查看远程库信息,使用
-
git remote -v
从本地推送分支,指定分支名称
-
git push origin branch-name
如果推送失败,先抓取远程的新提交,第一次要指定分支名称(实际操作中推送之前应该先获取分支)
-
git pull origin branch-name
在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
-
git checkout -b branch-name origin/branch-name
建立本地分支和远程分支的关联,使用
-
git branch –set-upstream-to branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
2 SSH生成
-
ssh-keygen -t rsa -C “********@qq.com”
先设置用户信息
-
git config –global user.name “某某”
-
git config –global user.email “********@qq.com”
不用输入,直接回车三次
3 修改git默认路径方法:
右击Git Bash图标—>选择Short Cut标题栏—>修改Start in为想要管理的目录。
去掉–cd-to-home,修改“起始位置”为自定义的git 本地仓库的路径,如:F:\git
4 commit message 格式
<type>(<scope>):<subject>
type(必须)
用于说明git commit的类别,只允许使用下面的标识。
feat:新功能(feature)。
fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
- fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
- to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix
docs:文档(documentation)。
style:格式(不影响代码运行的变动)。
refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
perf:优化相关,比如提升性能、体验。
test:增加测试。
chore:构建过程或辅助工具的变动。
revert:回滚到上一个版本。
merge:代码合并。
sync:同步主线或分支的Bug。
scope(可选)
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
例如在Angular,可以是location,browser,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影响了不止一个scope,你可以使用*代替。
subject(必须)
subject是commit目的的简短描述,不超过50个字符。
- 建议使用中文(感觉中国人用中文描述问题能更清楚一些)。
- 结尾不加句号或其他标点符号。
根据以上规范git commit message将是如下的格式:
fix(DAO):用户查询缺少username属性
feat(Controller):用户查询接口开发