当你领到一台新电脑或者已有电脑重装系统了,你需要做哪些,来使用git。
windows+R输入命令ssh-keygen -t rsa -C “[email protected]”
问题:我们需要的是公共秘钥,如果没有 .pub后缀的文件
原因:隐藏了已知文件类型的扩展名
解决:
>本地新建文件夹右键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 分支名
至此新的电脑或新的系统:本地仓库重新建立了与远程仓库的连接
1.是否是需要本地是一个仓库
git clone 不需要本地仓库(.git文件夹) 在本地仓库文件夹内生成一个新的文件夹alibaba
git pull 需要先初始化本地文件夹为一个本地仓库(有.git文件夹) 直接将远程仓库文件夹内的文件拷贝到本地仓库(文件夹)
2.切换分支(仅限于刚拉下代码的时候)
git clone git远程仓库已有的分支可以直接进行切换
git pull 不能直接切换远程仓库 已有的分支
3.推送远程库
git chekcout -b dev
git push --set-upstream origin dev
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命令作出系统的总结。
注意:不要直接在迭代分支上写代码:比如我们这次的迭代分支是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
根据angular规范提交commit,这样history看起来更加清晰,还可以自动生成changelog。
<type>(<scope>:<subject>)
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
(1)type
提交commit 的类型,包括以下几种
提交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
$ find . -name .DS_Store - print0 | xargs -0 git rm -f --ignore-unmatch
向顶层的.gitignore文件中增加 .DS_Store然后
$ git add .gitignore
$ git commit -m ‘.DS_Store banished’
将 /tree/master换成/trunk/, 然后用svn checkout,例如:
svn checkout https://github.com/Mooophy/Cpp-Primer/trunk/ch03