git工作流程
image.png
本地git与github建立连接
- 在本地创建ssh key来创建连接,
$ssh-keygen -t rsa -b 4096 -C "邮箱"
- 生成公钥、私玥,在家目录
$cd ~/.ssh
会生成id_rsa(私玥)、id_rsa.pub(公钥) - 复制粘贴公钥到github上,
$cat id_rsa.pub
显示出公钥复制粘贴到github上,头像->setting->SSH and GPG keys->new ssh key - 这样就建立好了远程仓库和本地仓库的连接
-
存在远程仓库,怎么与本地建立连接
首先在github上面创建一个仓库new repository- 找到该仓库的ssh地址,例:git@github.com:aaa/bbb.git
- 克隆远程仓库,
$git clone git@github.com:aaa/bbb.git
//后面可加文件夹名
-
存在本地项目,怎么与远程仓库建立连接
- 创建好远程仓库new repository(与本地项目文件夹同名)
- 初始化本地仓库,在项目根目录没有‘.git’文件的情况下初始化
git status
git init //初始化本地仓库
touch REDME.md
git add .
git commit -m "xxx"
git remote add abc git@github.com:abc/bbb.git //加入远程仓库
git push abc master
git常用指令
- git commit -m 与 git commit -am 的区别:
「工作区」 ——「暂存区」——「本地仓库」——「远程仓库」
git add . //工作区到暂存区
git commit -m "提交内容" //到本地仓库
git push //到远程仓库
以上三行命令可简化成两行
git commit -am "提交内容"
git push
前提是提交的文件不是新增的,因为-am只能用于已跟踪状态,而新增文件属于未跟踪状态,必须先add一次
- 初次使用在git上设置用户名和邮箱地址
$git config --global user.name "xxx"
$git config --global user.email xxxx@qq.com
- remote标签名相关操作
-
git remote -v
查看本地仓库记录的远程仓库地址 -
git remote add abc git@github.com:abc/blog.git
添加仓库地址 -
git remote remove ads
删除该仓库地址 -
git remote rename abc aaa
修改标签名 -
git remote set-url abc git@github.com:bbb/blog.git
修改仓库地址名
- git分支
-
git branch -a
查看所有分支 -
git branch dev
创建dev分支 -
git checkout dev
(进行项目编辑后,git push abc dev
//提交到dev分支上) -
git checkout -b dev
(创建dev分支并切换到dev分支) -
git checkout master
切换到主干 -
git merge dev
将dev分支代码合并到master -
git push abc master
推送到master
- git撤销:在
git push
之前,暂且把本地仓库的代码还原叫做撤销
-
git reset --soft xxx
从暂存区中撤回。 -
git reset --hard xxx
完全舍弃你没有提交的改动和将你本地仓库全部操作的指针退回到指定操作。
1.回到上一个版本,可以用
git reset --hard HEAD^
,上一个版本就是HEAD^
, 上上一个版本就是HEAD^^
,往上n个版本写n个^,写成HEAD~n
。
2.当然也可以精确撤销,使用git reset --hard <commitID>
注意 ,版本号太长了, 写四五个就行 ,就可以精确返回你想要的版本。
用
git log /git log --pretty=oneline
来查看版本号。使用git reflog
来查询记录你操作的每一次命令。
- git回滚:当已经
git push
到远程仓库,把已经提交到远程仓库的代码还原叫做回滚
git log
git revert <commitID>|<HEAD^..>|<HEAD~n>
reset和revert区别:
revert :放弃指定提交的修改,但是会生成一次新的commit,被放弃修改的记录都在,本次放弃修改的commit也会记录下来,就是用一次新的commit来回滚之前的commit;
reset :将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。
-
git push -f origin master
, 强制推送覆盖到远程仓库