一.git是什么
git是一个分布式版本控制工具,所谓版本指的是每次提交都会生成一条记录,这次记录就可以理解为版本,git可以进行版本记录查看,提交和回退等操作
二.git的两大特性
2.1 版本控制是在本地
git 的版本控制在本地,所做的提交,查看,回滚都是在本地进行操作,这样就可以避免在没有远端仓库,或是在没有网的情况下可以继续执行
2.2 git的分支管理
git的一大强势在与他的分支管理。git创建分支,合并分支是比较方便的,当然,如果有冲突的话,也是需要解决的。那使用分支有什么好处呢,举个例子:我们在日常开发中,可能是需求原因,需要在一周后升级,但是自己手头上又在忙别的事,自己估算一周后并不能完成这个任务。这时候你就会很烦到底要不要去做这件事了。如果你使用git,你就可以创建一个分支,将任务时间长,一下子不能放入另外一个分支上去做,等到升级时可以用原来的分支去上线,这样互不影响,等两个都完成时,只需要合并分支即可
三.git的基本操作
这里远端仓库使用码云,git工具使用最新的git客户端,这里不推荐使用git可视化工具(如果对git不知道的话,你根本不知道干了啥)
3.1创建远端仓库
3.2添加好后码云那边会有提示怎么进行操作,这里我就使用码云推荐给你的方式
如果你设置本地用户名和邮箱,就不需要进行上一步操作
3.2.1创建本地仓库并推送给远端
首先进入文件目录,右键点击git bash here,然后执行 git init
然后我在这里添加一个文件,作为首次提交的文件
add 是把文件加入暂存区,提交会把暂存区里的文件提交上去,commit是提交这次记录,如果是需要把所有改动的文件加入,可以执行 git add .
3.2.1 将本机仓库和远端仓库关联
按照码云的提示,执行
git remote add origin https://gitee.com/xiongxin11/mytest1.git,这里不建议使用ssh协议的,因为你可能没设置ssh key,但是http协议都是可以使用的,
添加好后,可以使用git push命令 ,输入完密码后将其推送给远端
,
这里码云建议你创建readme.md和.gitignore文件,readme.md是一个文档,用于描述你的远端仓库,.gitignore用于你忽略不提交的文件。
3.2git的冲突解决
当你本地和远端同时修改一个文件时,就会产生冲突。
首先我修改远端仓库
然后我修改本地文件
首先,我们的第一反应是是先更新代码,然后解决冲突,但是,你会发现不行,
使用git pull后报错
查看日志也是本地的提交记录,远端的并未更新。
如果你仔细查看git 的打印信息,它已经告诉你很清楚了,大致意思是你的文件会被重写,请使用commit或是stash来处理。这里我使用commit的方式来处理,以后有时间讲述stash方式来处理
首先提交到本地
然后更新 git pull
显示合并失败,需要修复冲突,然后提交他们
打开文件会发现
head代表你本地,>>>代表是远端的,手动解决冲突,然后提交
查看日志你会发现本地提交了两条,远端提交了一条
提交好后就可以推送给远端了 git push origin master
3.3git的版本回退
git的版本回退也是一大特色
版本回退有两种操作 一个是reset,一个是revert
reset的含义是重置到某个提交记录,当然当你使用reset时,改提交记录之后的会被丢失
revert的含义是回到某个提交记录,但是是用一个新的提交来回到这个提交。
3.3.1 git reset 操作(谨慎操作)
执行 git reset --hard +版本号,回退到对应的版本,hard是本地的文件也会跟着回退到当时的记录,soft代表提交记录回退,本地的文件是不会回到之前的。
git log查看日志后面的几条记录被移除
回退后我想把本次提交推送到远端
使用git push origin master 发现失败
它提示你使用git pull来更新,但是现在不能这么做,因为git pull之后代码又回到之前的状态,之前的回退白做了,
所以这里使用git push -f origin master来强制提交(谨慎使用)
查看远端仓库就被回退了
3.3.2 git revert 操作
因为我这里记录很少,我先提交一次
使用git revert +版本号进行回退
右边显示的状态为revrting.
查看文件,发现文件有冲突,
使用git status查看状态
然后他说要解决冲突,然后使用 git revert --continue继续,没办法我只好手动解决冲突。
解决好冲突后,我然后执行git add . 操作,
接着执行 git revert --continue
然后弹出这个页面
我使用 shift +:然后输入去q!不保存退出
查看提交记录,它自己自动带上了提交信息,至此,revert操作完成
总结: revert的方式想法挺好,但是实际操作时发现挺麻烦的,还有两个大问题。
1.为什么我回退还需要解决冲突呢,如果是有很多文件时需要每个都解决吗
2.回退时,发现有冲突的部分不是回到指定的,是回到指定提交的上一个提交内容
望大佬指教