代码版本管理工具,定要先更新后提交,git提交本地,推送远程
集中式版本控制系统---中央服务器(不安全)--图书馆借书--必须要联网--提交代码到中央
CVS
SVN
----受限与网络,回退,多版本分支
Maven--https://mvnrepository.com
分布式版本控制系统-----git----这个 “中央服务器” 只是为了方便大家“交换”修改,每个人的电脑上都是一个完整的版本库(安全),不需要联网--提交代码到本地
1 配置全局属性-用户名密码
git config --global user.name "----"
git config --global user.email "---"
git config --list
git config -l
2设置仓库目录--初始化
该目录下直接 git init 生成隐藏文件夹*.git
或者git init --bare 直接是设置git仓库,不生成隐藏目录--用于搭建自己git远程服务
3 仓库基本操作
a 当前仓库状态 git status
b 添加暂存库 git add 文件名/批量全部添加 git add .
c 提交到本机本地版本库 git commit -m ”注释"
不区分暂存库版本库,一步直接提交到版本库 git commit -a -m "注释"
* 查看文件改动 git diff 文件名
* 查看文件提交栈历史 git log 文件名--可得到 commit ID--用于版本回退
注意:
git 三区-工作区 暂存库 版本库Master --历史穿越HEAD
虽是同一文件,但要注意不同区域的修改!提交的结果
添加后再修改,然后提交。此时后面的提交不应被提交。提交的是第一次添加的结果。
* 版本穿越--回退切换--commit ID 与Master分支上的HEAD指针
git log --pretty =oneline
HEAD指的是当前正在使用的版本。最新的提交点
改变了HEAD的指针--回退指定版本-- git reset --hard~1
* 查看删除的提交点日志 git reflog 针对版本的操作,恢复指定版本
git reset --hard id值 提交点就是恢复点
* 撤销修改
未add--工作区撤销--git checkout 文件名
已add未commit--暂存区撤销--先撤到工作区,再回退内容
git reset HEAD 文件名 + git checkout 文件名
区域操作
工作<——>暂存 git add /git reset HEAD
暂存——>master分支 git commit
* 文件删除
工作区 del 文件名 再提交 git commit -a -m "删除"
再恢复文件 git reflog --> git reset --hard id值
未提交 git checkout 文件名
总结:工作区恢复checkout,Master分支上用版本穿越git reset --hard id值
远程仓库服务器----国内外代码托管网站----在线的基于Git的代码托管服务平台
github
git remote add origin git@github...
git push -u origin master
注意仓库初始化,远程初始化就克隆,远程没有初始化就本地初始化然后推送过去
gitee
......
模块代码与分支代码
每个模块可能都有不同分支
多个模块多个分支
* 分支创建与合并
Git规定所有要使用的分支将其定义在Master分支上。Master里的代码是提供给用户使用的,稳定!
开发过程会不断变化调试。所有的合作开发要在子分支上。最后反合主分支!
维护开发必须要在原有基础上创建新的分支!
查所在模块本地分支 git branch
在该版本库创建新分支名 git barach 分支名 (在最后一个提交点创办的)
切换分支 git checkout dev分支名 (HEAD指向修改)
在新分支上开发---新分支比master分支代码更多
开发完毕,切回主分支开始 分支合并/代码返合/
git checkout master 合到哪,切到那!
git merge 分支 即快速合并,前提条件,master分支没有任何变化
其实改变master指向最方便(Fast-forward),HEAD指向随当前分支/操作而改变!
git push -u origin(指代远程) 分支名如master
git push -u origin dev 将分支提交到远程后,在github就可以看见分支信息
* 本地库删除分支 git branch -d 分支名
远程库也删除
git push orgin --delete 分支名 直接删除
git push orgin:分支名 推送空分支覆盖
冲突修改----一个文件被多人修改
git checkout -b dev ==创建并切换到那个分支
git merge 分支名 -->出现conflict,同时该分支上的文件内容会有标记!
解决冲突后,查状态,再git commit -a -m ""
分支合并模式
git log --graph --pretty=oneline
Fast-forward 提交方式没有提交点!不会产生提交信息!
git merge --no-ff -m "注释" 分支名 ; “-no-ff” 参数即no fast forward模式
实际中,master分支上不允许进行开发,master分支是要提供给客户,最终形式发布的!
所有人在dev分支上合并后,并且调试完毕后,在合并到主分支,进行测试回归,最后发布!要使用“-no-ff” 参数 即 no fast forward模式。产生新的提交点!
工作区暂挂,当前分支没搞完,要紧急去处理另一分支的修改提交。
git stash 暂存分支
git stash list
* 恢复挂起
恢复挂起的工作区 git stash apply + 删除暂挂区 git stash drop
直接一步到位 git stash pop 恢复工作区+删除暂挂区
在主分支上 删除 其他分支!(自己不能删自己) 但git branch -d 分支名->该分支未合并,不允许删除!
分支没合并就删除,用强制删除 -D
补丁分支----不用分支合并,应用补丁修改主干分支
git diff master > patch 命令行管道输出流,输出patch文件
到master分支上应用这个补丁信息 ,git apply patch ,再添加提交推送(还不如直接在主分支上改)
修改需要通知远程开发者本人
git format-patch -M master 该版本目录下会多了一个*.patch文件,里面记录了修改者及代码修改内容等信息
把这个补丁拿到主干master分支上应用 git am *.patch ,再添加提交推送
* 抓取github上xx分支,且变为本地 yy分支
关联分支 git checkout -b yy origin/xx
git pull 抓取失败
git branch --set-upstream-to=origin/xx yy
git pull 可以抓取
标签
git tag
git tag v1.0
git log --pretty=oneline --abbrev-commit
git tag v0.1 7f111fe(commit id)
git tag v0.1 -m "注释"
git show v1.0
git push origin v1.0
git push origin --tags
本地 git tag -d v0.1
远程 git push origin :refs/tags/v1.0
搭建git私服---略
图片参考链接 https://myslide.cn/slides/3023?vertical=1
命令参考链接 lxh