常用命令行
一、设置git客户端的名字邮箱
user.name和user.email是git客户端的两个变量,简而言之就是记录每次本地文件commit的是谁做的,GitHub是通过邮箱来记录贡献的,一般可以用以下命令行进行全局配置,如果你会用不同身份在不同项目上进行提交,则可以不加 -g
进行本地配置
git config -g user.name "name"
git config -g user.email "email@mail.com"
运行了以上命令行后,.git文件夹里的config文件会多一个关于user的配置,即name 和 email
[user]
name = 你的name
email = 你的email
二、工作区和版本库
工作区:电脑上看见的目录或文件
版本库:即文件管理区,在这里进行文件版本管理,.git目录为其配置文件(其中有stage暂存区,git为我们创建的第一分支master,指向master的指针HEAD)
1、创建仓库并提到版本库
git init //把这个目录变成git可以管理的仓库
git add hi.txt //添加到工作区
git commit -m //提交到本地版本库(暂存区)
2、版本回退
版本回退可以先查看提交的版本号,然后回退到该版本号指定的版本
-
查看提交和回退信息:
git reflog //查看所有分支的提交和回退信息 git log //查看所以分支的提交信息,--pretty=oneline(横排显示,只留下版本号和提交注释)
- 版本回退:版本回退的原理其实是重置HEAD指针指向,将HEAD指向制定commit id就可以将文件版本改为该次提交的版本,同理可以用reset命令取消版本回退。
-
其中-hard撤销工作区,暂存区,本地仓库的内容到指定节点,-soft只撤销本地仓库,工作区和暂存区不变。
git reset –hard HEAD^ //回退上一个版本 git reset –hard HEAD^^ //回退上上个版本 git reset –hard HEAD~100 //回退前一百个版本 git reset -hard 版本号 //回退到指定版本号 git reset –soft HEAD^ //回退上一个版本 git reset –soft HEAD^^ //回退上上个版本 git reset –soft HEAD~100 //回退前一百个版本 git reset -soft 版本号 //回退到指定版本号
3、撤销工作区修改
放弃某文件在工作区的修改,恢复为上一次添加到版本库的版本
git checkout -- 文件名 //撤销该文件名在工作区还没有存入版本库的修改
三、分支操作
分支管理策略:一般在新建的dev分支上干活,分支代码稳定后发布到master主分支上
git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff
来禁用”Fast forward”模式
1、demo:创建一个dev分支并merge到master的步骤:
- 创建并切换到分支dev:
git checkout -b dev
- 修改readme.txt内容。
- 将修改的内容添加到暂存区:
git add .
和git commit -m "提交注释"
- 切换回主分支(master):
git checkout master
。 - 合并dev分支
git merge --no-ff -m "注释" dev
常用命令行:
git checkout -b dev //创建+切换分支dev
git checkout dev //切换分支
git branch dev //创建分支
git branch -d dev //删除分支
git branch //查看分支,会列出所有的分支,当前分支前面会添加一个星号
git merge dev //将dev分支合并到当前分支
git merge --no-ff -m "合并注释" 分支名
git log //查看分支合并情况
2、demo:创建一个修复bug的分支
git stash 把当前工作现场“储藏”起来
git checkout master 切换到需要修复bug的分支
git checkout -b issue-101 创建临时分支,修复bug101,提交
git add readme.txt
git commit -m "fix bug 101"
git checkout master返回分支,合并bug修复分支,删除bug修复分支
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
git checkout dev返回工作的分支
git status 工作区是干净的
git stash list 查看隐藏的列表
恢复隐藏内容:
git stash apply 恢复
git stash drop 删除
git stash pop 恢复并删除
git stash apply stash@{0} 多次隐藏,恢复指定stash
3、demo:创建一个添加新功能的feature分支
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支
- git checkout -b feature-new
- git add hi.txt
- git commit -m "add feature new"
- git checkout master
- git merge --no-ff -m "merged feature-new" feature-new
- git branch -d feature-new
- git branch -D feature-new//没合并之前强行删除
四、远程仓库
1.1、SSH验证
很多时候需要将本地仓库传输到远程仓库,经常会需要ssh验证,所以我们先要创建ssh证书以获得上传到github的权限,即先本地创建证书,将私钥存在本地,公钥存在github上,即可以在传输时验证身份证明本地是被允许传输数据到远端的。
- 创建ssh证书公钥私钥:
ssh-keygen -t rsa -C "邮箱地址"
运行后,能在C:\Users\.ssh
中找到公钥和私钥,公钥存在github,私钥保存在本地
- GitHub创建ssh keys:
登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容
- 测试你的ssh-key
ssh -T git@github.com //测试你的ssh-key
1.2、绕开ssh验证
如果我们用的https而不是git开头的远端路径,会出现没有权限的情况,可以用以下命令行绕开ssl验证,然后每次push需要输入用户名密码即可
git config --global http.sslVerify false
也可以在config文件的url中添加用户名密码。
2、本地仓库和GitHub仓库建立连接
git remote add origin git@github.com:地址.git
3、本地分支与GitHub仓库的分支建立连接
推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令:git push origin master
git branch --set-upstream dev origin/dev //本地dev与远程仓库dev建立连接
git push -u origin master //本地master和远端master建立连接且上传
4、本地分支推送到远程仓库分支
git push origin master
5、克隆远程仓库
git clone git@github.com:地址 //在需要克隆库的文件夹下执行
6、如果远程仓库有变化需要先pull
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:brantest //将远程主机origin的master分支拉取过来,与本地的brantest分支合并。
git pull origin master //其中冒号后面的可以省略,表示将远程origin主机的master分支拉取过来和本地的当前分支进行合并
git fetch origin master:brantest //其上命令行等同于用fetch和merge
git merge brantest
五、多人协作
从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
常用命令行:
git remote add origin git@github.com:地址.git \\添加远程库
git remote \\查看远程库信息
git remote -v \\显示更详细的信息,显示了可以抓取和推送的origin的地址
git push origin master(分支名)\\本地分支master推送到对应的远程分支上去
git push origin dev
注:
- git pull 如果push不成功,你的队友已经修改代码,需要先pull下来手动消除冲突然后再push
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发
- git checkout -b dev origin/dev创建远程origin的dev分支到本地
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。