关于git,你知道多少?

关于git,你知道多少

准备工作

当你领到一台新电脑或者已有电脑重装系统了,你需要做哪些,来使用git。

  1. 生成ssh秘钥

windows+R输入命令ssh-keygen -t rsa -C “[email protected]
关于git,你知道多少?_第1张图片
问题:我们需要的是公共秘钥,如果没有 .pub后缀的文件
原因:隐藏了已知文件类型的扩展名
解决:
关于git,你知道多少?_第2张图片
关于git,你知道多少?_第3张图片

  1. 登录github新建ssh key
    关于git,你知道多少?_第4张图片
    关于git,你知道多少?_第5张图片

  2. 验证ssh

>本地新建文件夹右键Git Bash Here
>git init
>git config user.name 'github名字'
>git config user.email 'github绑定的邮箱'
>本地仓库与远程仓库建立连接:
git remote add origin [email protected]:China_forrest/learngit.git       
>把远程仓库源代码拉取到本地
git pull origin master   这里的master指的是远程仓库的分支名
>然后yes
>验证成功后,就会把远程分支master分支的代码拉取到我本地的文件夹,
同时在本地创建一个master分支
>建立本地分支与远程分支的连接
git branch --set-upstream-to=origin/master或
git branch  --set-upstream  dev origin/dev或
第一次推送的时候git push -u origin 分支名

至此新的电脑或新的系统:本地仓库重新建立了与远程仓库的连接

从远程库拉代码之git clone和git pull的区别

1.是否是需要本地是一个仓库

git clone 不需要本地仓库(.git文件夹)    在本地仓库文件夹内生成一个新的文件夹alibaba
git pull  需要先初始化本地文件夹为一个本地仓库(有.git文件夹)         直接将远程仓库文件夹内的文件拷贝到本地仓库(文件夹)

git clone
关于git,你知道多少?_第6张图片
git pull

关于git,你知道多少?_第7张图片

2.切换分支(仅限于刚拉下代码的时候)
git clone git远程仓库已有的分支可以直接进行切换
关于git,你知道多少?_第8张图片
git pull 不能直接切换远程仓库 已有的分支
关于git,你知道多少?_第9张图片
3.推送远程库

  • git clone 直接指定分支可以推动到远端
git chekcout -b dev
git push --set-upstream origin dev
  • git pull 先指定源
git remote add origin [email protected]:rdmclin2/learngit.git,远程库的名字叫origin
git pull origin master
git push -u origin '分支名’

知道

关于git命令我们仅仅知道,git add,git commit, git push,是不能满足团队协作开发的。本文将对git命令作出系统的总结。

团队协作

关于git,你知道多少?_第10张图片

  • 首先,可以试图使用git push origin branch-name 推送自己的修改
  • 如果推送失败,则因为远程分支比你的本地分支更新,需要用git pull试图合并
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决冲突后,再用git push origin branch-name 推送就能够成功
  • 如果git pull 提示 “no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用git branch --set-upstream branch-name origin/branch-name

注意:不要直接在迭代分支上写代码:比如我们这次的迭代分支是dev,那么在dev上checkout出自己的开发分支,一个功能完成后提交MR到dev上,有其他同学来review,有问题的地方进行整改,全部ok后合并入dev。等dev也稳定之后合并入master.

关联本地和远程分支

  • 第一种,远程分支如dev,本地分支如dev,
    用git branch --set-upstream dev origin/dev

  • 第二种,本地分支创建分支如dev,用git push -u origin dev,将本地分支上传到远程仓库,并关联起来,如果远程分支没有dev分支,会自动创建。

  • 第三种,抓取远程分支并在本地建立关联的分支,
    用git chekcout -b local-branchname origin/remote_branchname

Commit提交规范

根据angular规范提交commit,这样history看起来更加清晰,还可以自动生成changelog。

<type>(<scope>:<subject>)
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

(1)type
提交commit 的类型,包括以下几种

  • feat:新功能
  • fix:修复问题
  • docs:修改文档
  • style:修改代码格式,不影响代码逻辑
  • refactor:重构代码,理论上不影响现有功能
  • pref:提升性能
  • test:增加修改测试用例
  • chore:修改工具相关(包括但不限于文档、代码生成等)
  • deps:升级依赖
    (2)scope
    修改文件的范围(包括但不限于doc,middleware,proxy,core,config)
    (3)subject
    用一句话清楚的描述这次提交做了什么
    (4)body
    补充subject,适当增加原因、目的等相关因素,也可以不写
    (5)footer
  • 当有非兼容修改时可以在这里描述清楚
  • 关联issue,如Close #1, Close #2 ,#3
  • 如果功能点有新增或这修改的,还需要关联 chair-handbook和chair-init的MR,如chair/doc!123
    示例:
    1 fix($compile) : couple of unit test for IE9
    2
    3 Older IEs serialize html html uppercased, but IE9 does not …
    4 Would be better to expect case insensitive,unfortunately jasmine does
    5 not allow to user regexps for throw expectations.
    6
    7 Document change on chair/doc!123
    8
    9 Cloes #392
    10 Breaks foo.bar api, foo.baz should be used instead
    具体查看文档点这里

提交Merge Request
如果你有仓库的开发者权限,而且希望贡献代码,那么你可以创建分支修改代码提交MR,让负责人review代码合并到主干。

//先创建开发分支开发,分支名应该有含义,避免使用update、tmp之类的
$ git checkout -b branch-name

//开发完成后跑下测试是否通过,必要时需要新增或修改测试用例
$ npm run test

//测试通过后提交代码,message建下面的规范

$ git add . //git add -u 删除文件
$ git commit -m "fix(role):role.use must xxx"
$ git push origin branch-name

提交后就可以在gitlab创建MR了。
由于谁也无法保证过了多久之后还记得多少,为了后期回溯历史的方便,请在MR时确保提供一下信息。

需求点(一般关联issue或者注释都算)
升级原因(不同于issue,可以简述一下为什么要处理)
框架测试点(可以关联到测试文件,不用详细描述,关键点即可)
关注点(针对用户而言,可以没有,一般是不兼容更新等,需要额外提示)

指令集合

设置
git config --global user.name  'Your Name'
全局设置用户名   "--global"代表所有仓库使用这一配置

全局设置邮箱
git config  --global  user.email "[email protected]"

.gitignore 编写
git config --global alias.   order为命令设置别名
$ git config --global alias.st status 告诉Git,以后st就表示status,下面列一些常用设置
 $ git config --global alias.co checkout
 $ git config --global alias.ci commit
 $ git config --global alias.br branch
 $ git config --global alias.unstage 'reset HEAD' 撤销暂存区修改
 $ git config --global alias.last 'log -1' 显示最近一次提交
 $ 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配置文件放在用户主目录下的一个隐藏文件.gitconfig中,可以直接修改

基本操作


 - git init   初始化一个git 仓库 
 - git add <file>  添加文件到仓库,可以多次add 如:git add readme.txt 
   git reset HEAD <file>  从暂存区撤销一个add 
   git reset  HEAD test.tsx
   git commit -m ""   快速提交代码,多次add 一次commit
   git rm <file> 从版本库删除某文件
   git checkout --<file>


丢弃工作区的修改
git checkout --readme.txt
git checkout .   丢弃所有本地修改
如果已经add,可以用git reset HEAD <file> 先撤销add,再丢弃更改
如果你已经commit了,可以用 git reset --hard  HEAD^  进行回退上一个版本
如果你已经推送远程分支了,也就凉凉了......
git status  仓库状态
git diff  
git diff readme.txt  可以看到当前文件的改动
git diff 列出所有文件的改动
注意git diff会比较仓库中的文件和不在仓库中的同一文件的差异,也就是
git add的文件A,以及git add后改动的文件A,

如果没有改动的话,git diff 甚至智能地不自动匹配文件

git log  查看提交历史
 $ 从最近到最远 可以加 --pretty=oneline 让git 显示得更清楚些
 $ git log --graph --pretty=oneline --abbrev-commit  用--graph查看分支合并图
$ 版本回退
 $ 如 git reset --hard HEAD^, HEAD代表当前版本,HEAD^代表上个版本,Head^^代表上上版本,HEAD-100代表往上100个版本
 $ 不过过去了回不来怎么办, 只要命令行窗口没关闭,就可以找到你要回去的commit id,然后再用如 git reset --hard 3628164 回到该版本.
 $ 如果第二天后悔了怎么办?用 git reflog 查看所有命令,再找到相应的commit id即可

分支管理

git branch   查看分支
git branch  
git branch dev  创建分支
git branch -d dev  删除分支
git push origin :   删除远程分支
git branch -D 强行删除分支
如git branch -D feature-vulcan 没有进行合并的分支用 -d参数会销毁失败
如果实在要丢弃一个没有合并过的分支,用-D进行强行销毁

修改本地分支名称 git branch -m 
     git branch -m feature-a  feature-b

git checkout  切换分支
git checkout -b issue-101  创建分支并切换
git merge   合并分支(branch name)到当前所在分支
git merge --no-ff -m 

$ 禁用fast forward
 $ 如 git merge --no-ff -m "merge with no-ff" dev
 $ --no-ff表示禁用fast forward,在ff模式下删除分支后会丢掉分支信息,所以用--no-ff后
 $ git就会在merge的时候生成一个新的commit,因为要有一个新的commit所以要加上-m参数

git stash 储藏工作现场,可以把当前的工作现场储藏起来,等以后恢复现场后继续工作
git stash list 列出储藏的工作现场
git stash apply 恢复现场,但stash内容不删除
git stash drop 删除现场
git stash pop 恢复现场的同时删除现场
git stash apply 多个现场时指定恢复某一现场(先用git stash list查看)
git rebase  整合分支 变基 、 高危操作请清楚了解原理和后果后再操作

远程仓库

ssh-keygen -t rsa -C "youremail@email"
创建ssh-key,将公钥添加到github等网站上
git  remote add origin 将本地仓库和远程仓库相关联,在本地仓库执行
如 git remote add origin [email protected]:rdmclin2/learngit.git,远程库的名字叫origin
可以添加多个远程仓库如git remote add rdmclin2 git@...  origin rdmclin2都是我们为远程仓库取的别名。
git remote set-url  origin 
修改origin 的地址,如:git remote set-url origin [email protected]:menchenglin/fcws.git

git push origin 
将本地内容推送到远程
如git push origin master,如果是第一次推送的话:git push -u origin master,
也就是第一次加上-u参数,可以吧本地分支和远程分支关联起来,以后就不要添加-u参数了

git clone 
从远程仓库克隆
如: git clone [email protected]:michaelliao/gitskills.git,非常常用的操作
clone时可以指定深度,git clone git://xx00  --depth  1

git remote
常看远程库信息,加上-v参数可以显示更加详细的信息

git pull
抓取远程分支最新提交并合并分支
如git tag v0.9 6224937,可以先用git log --pretty=oneline  --abbrev-commit 查看历史提交

git fetch
抓取远程分支最新提交(与pull的区别是fetch不直接合并)

git branch  ---set-upstream  
指定本地分支和远程分支的链接
如git branch --set-upstream dev origin/dev  指定本地div分支与远程origin/dev分支的链接

git tab 
打标签  如 git tag v1.0

git tag
查看所有标签,按字母排序

gitshow 
查看标签信息

git tag  
给某次提交打上标签
如 git tag v0.9 6224937,可以先用git log  --pretty=oneline  --abbrev-commit 查看历史提交

git tag -a   -m   
创建带有说明的标签
如 git tag -a v0.1 -m  "version 0.1 released"  3628164  , -a 指定标签名, -m 指定说明文字

git tag -s  -m  
采用PGP签名一个标签
如git tag -s v0.2 -m "signed version 0.2 released "  fec145a ,  -s 用私钥签名一个标签
看这里http://www.ruanyifeng.com/blog/2013/07/gpg.html 了解如何安装gnupg

git tag -d 
删除标签 git tag -d v0.1

git push origin 
推送标签到远程
git push origin v1.0

git push origin --tags
一次性推送全部尚未推送到远程的本地标签

git push origin  :refs/tags/
如: git push origin  :refs/tags/v0.9


现有工程中删除 .DS_Store

$ find . -name .DS_Store - print0 | xargs -0 git rm -f --ignore-unmatch

向顶层的.gitignore文件中增加 .DS_Store然后
$ git add .gitignore
$ git commit -m ‘.DS_Store banished’

下载github上单个文件夹

将 /tree/master换成/trunk/, 然后用svn checkout,例如:
svn checkout https://github.com/Mooophy/Cpp-Primer/trunk/ch03

你可能感兴趣的:(前端)