Git总结
概念理解
-
index暂存(又名staging area–暂存区)
暂存区是可以设置哪些变更要提交到版本库,哪些先不提交。临时存放的地方(staging area)。
-
work area–工作区
我们工作的区域空间
-
local repository–本地仓库
就是我们自己工作的电脑上保存版本数据的地方
-
remote repository–远程仓库
我们用Git进行操作,为了防止数据在自己电脑上丢失,比如错误删除,病毒攻击等原因造成了数据丢失,我们需要备份到远程的服务器上,这个服务器可以理解为远程仓库。
生成SSH Key
- 在用户目录下查看是否有.ssh目录若有则查看目录下是否有id_rsa(**)和id_rsa.pub(公钥)若有则不必再次生成直接使用
- 创建SSH Key:ssh-****** -t rsa -C "[email protected]"
- 登录到代码托管平台(如github)打开账户设置中的SSHKey页面粘贴公钥
- 可添加多个key(只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了)
使用流程
[workspace] -> add -> [local cache] -> commit ->[local repository] -> push ->[remote git repository]-> clone -> [git repository] checkout -> [workspace]
常用操作
本地初始化关联远程仓库
git config --global user.name 'nick'
git config --global user.email '[email protected]'
git init gitlearn # 初始化项目
git status # 查看状态
git add 1.txt # 添加修改到本地缓存
git add -A # 添加所有到本地缓存
git commit -am '1.txt' # 添加提交到本地仓库
git remote add origin https://github.com/csy512889371/gitlearn.git #添加远程仓库
git remote #查看远程
git push origin master -u
克隆及更新
git clone https://github.com/example/example.git #克隆项目
git pull # 拉取代码
分支管理
查看切换合并
git branch [-v] # 查看当前分支
git branch <branch name># 基于当前分支新建分支
git branch <branch name> <commit id># 基于提交新建分支
git checkout <branch name> #切换分支
git merge <merge target> #用于合并指定分支到当前分支
# 解决冲突,如果因冲突导致自动合并失败,此时status为mergeing状态
# 需要手动修改后重新提交(commit)
创建删除分支
git branch
git branch -a
git branch dev #创建分支dev
git checkout dev #切换到dev分支
git branch -d dev #删除分支
git branch -D 强行删除未合并的分支
git push origin dev -u #将分支提交到远程服务器
git branch -av
git branch -avv
提交代码冲突
git pull
# 本地合并
git commit -am '重新提交'
git push #提交到服务器
如果本地项目和远程都有项目且未做关联
git branch --set-upstream-to=origin/master master
git pull --allow-unrelated-histories
合并时强制禁用Fast forward
首先,仍然创建并切换dev分支:
git checkout -b dev
修改readme.md文件,并提交一个新的commit:
git add readme.md
git commit -m "add merge"
现在,我们切换回master:
git checkout master
准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
git merge --no-ff -m "merge with no-ff" dev
git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。
git merge 则不会显示 feature,只保留单条分支记录。
标签
git tag v1.0 #创建标签
git tag #标签状态
git push origin v1.0 -u #提交标签到远程仓库
git tag -d v1.0 #删除标签
git branch v1.0_dev v1.0 #基于标签创建分支
git log #查看日志
标签管理(标签也是版本库的一个快照)
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id。
git tag -a <tagname> -m "blablabla..."可以指定标签信息。
还可以通过-s用私钥签名一个标签:
git tag -s v0.5 -m "signed version 0.2 released" fec145a
git tag可以查看所有标签。
用命令git show <tagname>可以查看某个标签的详细信息。
如果标签打错了,也可以删除:
git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname>:
git push origin v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/v0.9
项目目前状态
$git status//查看当前git版本库的状态
退回某个版本步骤
- git log查看所有历史版本
- 获取某个历史版本的id
- git reset --hard id值
- 将修改提交到服务器(git push -f -u origin master)
存储当前工作状态
- git stash (储藏当前状态之后,就能切换到别的分支)
- git stash list (查看储藏状态的列表)
- git stash apply 储藏的名字 (回到原来的分支之后,如何恢复到之前那种混乱的工作状态)
实际开发中版本控制
原则
- master与daily-test为只读分支
- 所有合并原则上不可逆
- 日常或紧急分支上线后就不可再使用(建议删除)
- master与线上完全同步
- daily-test版本必须大于等于master