git

1  操作

1.1  clone项目

git clone git@example.com:project-name.git

1.2   进入代码目录

  1. cd gitlab-help

1.3   本地新建文件

  1. touch README.md // 接下来修改代码

  2. git add README.md // 添加,准备提交

  3. git commit -m “add README” // 提交到开发分支

  4. git push -u origin master // 将开发分支提交到服务器

1.4   创建本地分支

(小驼峰式命名法,比如zyHighway,不要使用特殊字符):

查看所有分支

  1. git branch

创建本地分支

  1. git checkout -b $feature_name

git checkout 命令加上 –b 参数表示创建并切换

git checkout -b name
等同于
git branch name
git checkout name

切换分支

  1. git checkout $fenzhiname

创建远程origin的dev分支到本地,这个命令创建本地dev分支:

  1. $ 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   撤销修改

  1. $ git checkout — readme.txt

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

1.6  版本回退

  1. $ git reset –hard commit_id

  2. $ git reset –hard HEAD^

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,

commit_id可以指定回到未来的某个版本.

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

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

1.7   删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

  1. $ rm test.txt

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:(我现实使用 git 版本 2.10.1 git rm 和 rm 可以达到同样的效果,都可以从版本库删除文件)

  1. $ git rm test.txt

rm 'test.txt'
  1. $ git commit -m “remove test.txt”

[master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

另一种情况是删错了,因为版本库里还有,可以把误删的文件恢复到最新版本:

  1. $ git checkout — test.txt

git checkout 是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

# 删除 untracked files
  1. git clean -f

# 连 untracked 的目录也一起删掉
  1. git clean -fd

# 连 gitignore 的 untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
  1. git clean -xfd

# 在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
  1. git clean -nxf
    git clean -nf
    git clean -nfd

1.8   提交到本地库

写代码,将写好的代码提交到本地库中:

  1. git commit -m “My feature is ready” -file

  2. git commit –a //提交全部改动过的文件

1.9   提交到远程分支

  1. $ git push origin master

如果要推送其他分支,比如dev,就改成:

  1. $ git push origin dev

本地分支名称hyhTestDemo和远程端口名称testDemo不一样时

  1. $ git push origin HEAD:testDemo

远程dev分支不存在时,第一次push

git push –set-upstream origin dev

1.10  删除分支

  1. $ git branch –d TestDemo

强制删除

  1. $ 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  多人协作操作分支

查看远程库信息,使用

  1. git remote -v

从本地推送分支,指定分支名称

  1. git push origin branch-name

如果推送失败,先抓取远程的新提交,第一次要指定分支名称(实际操作中推送之前应该先获取分支)

  1. git pull origin branch-name

在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;

  1. git checkout -b branch-name origin/branch-name

建立本地分支和远程分支的关联,使用

  1. git branch –set-upstream-to branch-name origin/branch-name;

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

2  SSH生成

  1. ssh-keygen -t rsa -C “********@qq.com”

先设置用户信息

  1. git config –global user.name “某某”

  2. 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):用户查询接口开发

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注