一、建立工作区
git进行版本管理 前提要求:
有一个被git初始化操作的文件夹
登录:
git config --global user.email “内容”
git config --global user.name “内容”
初始化操作:
1.命令行 cd 跟文件夹名称(此步骤不一定有)
2.在命令行输入 git init
二、版本库
(.git文件夹 就是 版本库 )
操作:在工作区(仓库)中创建文件,然后对文件进行一系列的修改操作之类的过程
一,基础操作:
git status 功能:表示查看git工作区的一个状态
git add 文件名.后缀 功能:上传暂存区
git commit -m“ 备注信息” 功能:提交到提交区
(1)nothing to commit:
未新建文件
(2) Untracked files: 未被追踪的文件
新建一个文件,查看状态
(3)进行git add后
使用add存到 暂存区
(4)进行git commit提交到提交区后(下面提交图片没有加备注信息,这是不完整的)
ps:只有进入了提交区后,文件才能真正被git管理起来
(5)修改文件后的状态
文件内容修改后,显示未提交(循环)
二,版本切换
git log 日志,也就是说查看git的日志信息
第一次备注信息是 LvJq.txt 第二次的备注信息是second
commit ID 为每一次的“身份证”
Author 为作者信息
Date 为提交信息
根据每一次的commit id可以切换版本
切换:
git reset --hard ID
显示如此,即操作成功
ps: ID不一定复制完,复制前面一部分即可
(1)简化日志目录 git log --pretty=oneline
(2)仅回退到上一个版本
git reset --hard HEAD^
副作用:回退到上一个版本后,最新的commit没了
解决方案:1.之前的操作窗口有最新的commit,复制回来进行
2.窗口被关闭了,使用git reflog查询所有的commit ID
三、工作区,暂存区,提交区
(1)工作区进行修改,然后Git 会有一个提示:
第一条 更新提交的信息
第二条 撤销改变(文件未同步到暂存区,同步到了,方法失效)
git checkout – 文件名.后缀名 注:“–”两边要有空格
内容变回之前的内容
(2)当文件已经同步到了暂存区,撤销改变
git reset HEAD 文件名.后缀名 功能:撤回同步到暂存区
新修改的文件同步到了暂存区
同步到暂存区内容撤回
接下来需要做的是再次利用git checkout --文件名.后缀名 把修改拉回工作区
(2)当文件较多的时候 利用git add .
把所有文件放到了暂存区中
分支管理
HEAD :如果说 内容已经add到了暂存区,此时想要撤销的话,需要先回到最新的一个commit ID上
HEAD^:上个版本、 HEDA^^:上上个版本……
HEDA 表示当前最新的版本的commit ID
master分支 为主分支,也是Git为你默认创建的分支
master分支指向的是最新的提交commit,头指针指向的是master分支
git的强大在于多人同时开发进行版本控制,原理在于 通过git的分支进行的
切出一个git开发分支的概念:
例如叫做" dev_wang "
(1)使用命令 git checkout -b 名称 创建一个分支
现在进行的所有操作 都是在新的分支上进行的
查看当前所有的分支情况,并且可以看到目前所处的分支
git branch
(2)通过分支切换仍然可以回到主分支
1 通过commit Id
2.通过git checkout master命令
特点:1.切换成功后,内容与主分支相同了;
2.在不同分支上进行的的版本管理,只有在自己的分支上才会生效
HEAD的补充:
HEAD的头指针指向的是当前最新的 commit
删除分支:
git branch -d 名称
注意不能够在该分支上删除该分支,否则删除失败(除非强制性删除)
强制性删除:
git branch -D 名称
分支合并与冲突解决:
一、分支合并
主分支master不会去动,只会用于版本的发布
分支开发的内容合并到主分支上
举例:
需求:一个新的开发人员 dev_zhang
(1)创建分支 git checkout -b dev_zhang
(2)进行文档的修改,并且add commit
(3)此时在小张的分支上多一个commit ID, 这个时候需要把小张修改内容进行版本的发布,就需要把小张修改的内容合并到master分支上
切换到master分支上,合并dev_zhang的开发内容:
git merge dev_zhang
小张的内容变同步到了master中
同步成功后,删除小张的分支(或者不删除)
二、冲突解决
冲突可以说是两个分支的冲突.具体是两个已经提交的分支的相同文件相同位置的的不同操作进行了合并.
遇到内容冲突的时候,可以手动解决冲突
并进行 add,commit的操作
如何具体解决冲突:
冲突发生的时候,最好能联系一下开发的人员,一起解决冲突.
一般情况下冲突后的文件会是:
<<<<<<<<HEAD
other code
========
your code
>>>>>>>>your branch name
解决的一般办法是:仔细对比,取综合的并集,就是尽量把所有不同的文件保留,共同的只留一份
个人的一点经验:多人协作开发的时候,如果出现了你没有改过的文件跟你冲突了,一定要去找到当事者,说清楚是如何冲突,然后协商解决,千万不要擅自拉别的分支去试图解决冲突,或找文件覆盖.同时记住,解决了之后,要add 和 commit 最后push.为保证万无一失,最后在冲突都解决之后,重启项目,特别是指服务器项目,保证至少不会有立即奔溃的现象发生.然后才去提交,push.
提交的时候,一定要保持清醒,先搞清楚自己要提交的文件之间的关系,然后再提交,这样才不会有文件缺失的问题,造成奔溃.
如果任务比较多,又建议开多个分支,分别进行开发.还是老话,一定要清楚自己在各个分支上做了什么,自己要提交的是什么.最好是能做个详细的笔记.好记性不如烂笔头.
最笨的办法:没有把握宁愿不要去提交生产机.
提交代码的时候不要走神,因为这是一个神圣的时刻.开发的时候你可以怎么测试都行,一旦上生产机,各种奇葩问题都会出现.
git config 和配置别名
git config 配置git 命令
git config -l 查看所有的配置信息 l为list的缩写
所有的信息都是整合过来的,具体来源(优先级降低顺序)
1.仓库级别:
仓库级别的配置位置: 当前仓库级别下的.git>config文件
2.全局级别
当前系统,用户区域
3.系统级别:
在git安装目录,etc文件夹中
git config --global 配置全局
1.查看仓库级别的
git config --local -l
2.查看系统级别的
git config --system -l
3.查看全局级别的
git config --global -l
4.编辑仓库级别的文件(其他的也是如此)
git config --local -e
进入这个页面后,怎么返回到上一个页面呀
esc
冒号wq 保存并退出
冒号q!不保存退出
git config --global --add user.name “用户名”
git config --global --unset user.name
配置别名
如 commit 用com代替
git config --global alias.别名 原名
打标签和忽略日志
1.打标签的对象是对应的commit ID
git tag 名称
查看一下当前的标签列表
2.给之前错过的commit ID打上标签
git tag 当前的标签名pre 要打的标签名
3.给标签附上说明(一般不用)
git tag 标签名 -m “说明”
4.删除标签
git tag -d 标签名
忽略文件
例如:创建一个person.class的类文件,发现git标注为Untracked file
add这个文件是绝对可以的 但是我不希望这个文件被git管理起来
方法:
在仓库的根目录下创建一个.gitignore文件
见具体准则
本地仓库和远程仓库
push/pull/clone
进行代码内容的推送,将本地的内容推送到具体的远程仓库上
(1)要让两者有联系
在本地仓库中配置一下它和远程仓库的关系
本地仓库增加远程仓库: git remote add origin 远程仓库的地址 这样就关联起来了
地址获取:(新建仓库后)
git remoto 查看关联情况
关联之后 把代码推送到远程仓库上
(2)本地仓库内容推送到远程仓库(需要有权限):
没有权限:需要添加权限,
A.需要在本地生成一个ssh key
1.在计算机中查看:c盘–用户–.ssh
2.如果没有
ssh -keygen rsa -C"946408024@qq.com"
输入 创建
打开pub的文档 将内容添加到ssh key中(可用记事本打开)
(3)在主分支上进行合并其它分支后
然后指定一下推送的分支即可
git push -u origin 分支名称
逆向操作:
例如,新来一个人,名字小王,需要进行开发,要把远程仓库的代码拉到本地开发
(1)clone 克隆操作
前提:sshkey添加好
(2)当远程仓库的版本内容如果和本地仓库的内容不一致,需要git pull,需要把远程仓库的内容拉下来到最新版本
远程仓库的建立
git init
git config --global user.name " "
git config --global user.email " "
//链接远程仓库
git remote add origin " "
//获取权限
ssh-keygen -t rsa -C " 邮箱"