GitHub学习(一)——本地git bash(1)
复习一下昨晚 涛兄带我们一起学习的一些在git bash 上使用的GitHub简单操作。
基本使用
预备状态
ssh免密码链接
{-t:密钥的类型
-C:用于识别这个密钥的注释(不添加注释直接ssh-keygen -t rsa也不影响使用)
ssh-keygen -t rsa -C "邮箱地址"}
连续按3次回车
(此时在win+R 在输入框里输入%userprofile%,就会跳转至你的家目录下。这时就会出现一个.ssh的文件夹,将里面的公钥pub打开,复制内容到网页的GitHub上setting里新建一个ssh密钥)
测试是否成功链接Github
ssh git@github.com
他会提示 Are you sure you want to continue connecting (yes/no)? 这时需要输入:yes
成功会提示成功认证你的账户
Hi aaronlinv! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
新建文件夹,初始化为Git仓库
mkdir 文件夹名
cd 文件夹名
git init (这步是核心,他会初始化为git仓库)
添加文件
vi 文件名
查看文件状态
git status(查看当前文件状态,如果不知道下一部要做什么的话也可以使用这个命令查看提示)
添加文件到暂存区
git add 文件名
提交commit -m 代表添加一个“提交信息”
git commit -m "简述操作的内容"
推送到GitHub(在GitHub上创建空白仓库,并复制仓库地址)
先添加远端参考
git remote add origin(自定义命名 一般为origin) 仓库地址
查看远端操作(会显示 fetch和push)
git remote -v
推送到远端仓库(使用SSH协议需要配置SSH免密登录)
先生成本地公钥,将他配置到仓库中
git push -u origin master
-u:指定默认远端仓库别名,下一次推送只需使用git push
origin:远端仓库的别名(默认origin)
master:分支名称
仓库克隆
克隆仓库到本地(可以使用HTTPS或者SSH协议)
git clone (复制下图箭头所标的仓库地址链接)
Git会新建一个与仓库名同名的文件夹,进入文件夹
cd 文件夹名
如果这个仓库已经克隆很久了,本地和远程可能存在差异了,可以拉取远程仓库最新状态到本地仓库
git pull(先保持本地与远端仓库一致)
分支管理
已经克隆仓库到本地
开始工作前,先拉取远程最新修改(可能同事已经修改代码并提交了commit)
git pull
新建并跳转到dev分支(也可使用git checkout -b dev)
git switch -c dev
查看分支情况
git branch
可以在dev分支上修改代码做add和commit
推送dev分支到远程(需要拥有远端仓库的权限)
git push origin dev
如果需要重命名远端分支则加上 :f1
git push origin dev:f1
删除远端dev分支
git push origin :dev
合并dev分支到master(需要先切换到master分支,在merge的过程可能需要解决冲突)
git switch master
git merge --no-ff dev
解决冲突
可以直接vi 要提交的文件名,或者输入code .(提前装好vscode)他会弹出本目录下的vscode 更直观的修改
例如出现下图的情况,以"="为分界线,"<<<<<<<"到"="为本次你修改的内容,,"="到">>>>>>>"之间为在你克隆后到你push期间别人修改的内容。如果需要添加在别人修改的后面,即把"<<<<<<<""="">>>>>>>"这些行全删掉。即可实现添加
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
删除本地dev分支
git branch -d dev
merge和rebase
新建并跳转到experiment分支
git switch -c experiment
添加并提交c4
vim c4
git add c4
git commit -m "c4"
切换回master分支
git switch master
添加并提交c3
vim c3
git add c3
git commit -m "c3"
merge
使用merge方式合并分支
先切换到master分支
git switch master
合并分支(会弹出commit message的编辑框,:wq 保存退出)
git merge experiment
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
rebase
使用rebase方式合并分支
先切换到experiment分支
git switch experiment
— merge示意图 引用自《Git Pro》
使用merge合并分支,相当于三方合并,合并c2,c3,c4(未新建experiment分支前的修改c2、新建分支后master分支的修改c3、experiment分支的修改c4)
直接使用git merge <要被merge的分支名> ,没有冲突的情况下默认使用参数:–f 即:Fast-forward(快进式合并)
推荐使用–no-ff 即:git merge –no-ff <要被merge的分支名>
这个参数的意思是禁止快进式合并,合并时会自动创建一次commit提交,保证提交链的完整性
而Fast-forward合并分支会丢掉分支信息
rebase分支
git rebase experiment
先切换到master分支
git switch master
将experiment合并到master
git merge experiment
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
— rebase示意图 引用自《Git Pro》
rebase的原理是:找到c3和c4共同的祖先c2,暂存共同祖先c2到当前分支(expriment)的修改内容,然后将分支指向master的c3,并应用之前暂存的修改内容
我们可以这么理解:rebase就是当前分支(experiment)提交的修改(c4)放到最前面,而把其他分支(master)已经提交的代码(c3)放到后面去,这样做的好处就是:自己写代码(experiment分支上的)将出现在master最新的一次commit中,一目了然
rebase:黄金法则:绝对不要在公共分支使用rebase,rebase会重写提交历史
本文根据自己回忆昨晚学习的操作结合林涛Git笔记而写,图文仍有些不明白的,还需要巩固学习。