Git实操从0到1| 8月更文挑战
欢迎关注公众号:卢卡多多
git实战教学
1.背景:
今天在我使用git作为提交的时候,一不小心提交了79个文件,但是我改的文件事2个,以至于多个commit的,都被我直接提交了远程仓库----(好多日志的文件,老大估计又得发飙),还好是我自己的分支,可以回退版本,但是远程的代码怎么办呢; 今天问题:
问题1:
当我修改了多个文件,但是我只想提交其中的一个文件进行commit ,然后进行push?标准的流程是怎么样的;(如何避免日志的提交) 开始新建仓库,直接在目录中拉取代码:
git init 目录初始化仓库
git clone 拿到具体的链接地址,开始使用
实例: git clone gitee.com/lucasweb/te… testdemo01
表示克隆---》原地址---》现在的目录名 进入具体的源码目录,记住是要进入git管理的目录; 开始新建一个分支(切换分支,因为拉取代码的都是master分支)
上述可以找到具体的git 中有许多的分支,我们开始自己新建一个; 开始利用idea直接将git管理的数据打开: C:\Users\web\Desktop\testgit\testdemo01 这是地址, 桌面的地址web/deskTop\
打开是这样的表示,默认是master分支,但是我们还具体的还没开始,我们创建了几个包名,供我们开始测试
我们先是写一个素材,放入master的分支中:\
红色的代表:没有被Git管理的文件;
绿色的代表已经被Git管理的文件
,我们来看看,绿色的文件直接提交,master2文件提交到master2远程分支上\
需要远程push的\
提交之后,我们看看远程\
明明我选择的是一个,但是他提交的就是两个,也就是说,push会把之前没有push的从commit的,直接提交过去;
为了解决疑惑,我有开始了提交了两个commit,看一下我这次push:\
只提交了一个commit;
但是;\
显示直接全部提交;
事实证明,push一次会把之前所有的commi都提交的;
怎么避免每次都提交一个commit,也就是我可以失效commit(撤销提交的commit)来使用
已经蒙了????
2.新建分支切换去合并代码
由于之前是在master开发,有很大的风险,然后我们就开始在新的分支上开发然后合并或者是review导master上面
git checkout -b lucas 新建一个分支并且跳过去;
或者是IDEA,右下角\
开始切换成功;\
,因为自己新建的分支---,可以将master的代码直接合并到新建的lucas上面;
合并master代码:
(我们分支A需要master的最新的代码,可以直接Git merge 分支名);\
本地开发lucas\
问题2:
当我本地的数据要更新master的代码,如何算是标准的merge到合并到自己的分支(如果是多余的文件,或者说是已经删除的代码信息呢);
然后master改造完毕; 我们直接跳回去lucas,看已经commit的代码能否保存(但是没有push)\
master中commit的所有集合都合并过来了,包括新增和修改;\
虽然说已经是可以的数据,但是,突然发现master本地提交的代码有问题,我想撤销之前提交的commit;
git reset --soft HEAD~n
可以将之前已经提交的commit撤销回来,(保存本地代码不变,add也不变)
问题3:
如果说我提交了一个commit ,而且已经push了,但是我发现数据是错的,我要重新退回本地---重新修改;(也就是撤销远程仓库的代码已经push的代码); 本地开发lucas;
但是我们开始了我们的创作之旅,首先是分支,在lucas上,我们创建了两个commit,一个push之后,数据直接将全部提交了,但是,注意,我提交的文件多了,错误了(“和上午一样一下子日志也给提交了”),但是现在,lucas上的提交记录
上述的图片中有很多的干货:
git reflog 显示所有的提交;
我们能看到左侧是 commitId(版本号),可以直接回退版本; 提交了两次,还有一次是合并到lucas
现在是lucas 的提交记录
怎么样撤回远程仓库的代码已经push的代码两次commit的代码;\
reset;
revert
我们先来测试git reset 是干嘛的;
git reset
由于近期的护网行动,我们公司使用的是一个外网的地址,我提交的文件还有错误,所以这里我就开始讲版本回退,重新提交commit ,然后是将数据直接变成--
强制push
git push --force
就可以成功\
修改仓库地址
因为提交的时候要修改仓库地址,外网的地址和内网的地址是不一样的,所以我们直接使用,\
git remote 查看仓库信息 显示 出的结果“orgin”
git remote set-url orgin 新的地址
首先搜索一下:(百度需要你的信息)\
我们测试的是 soft
版本穿越:
本地代码会找回来,;
@#请求版本号;
git reflog
git log
git rest --hard 版本号
目前已经删除的最近的commit的显示;-然后我们穿越回去;\
通过版本穿越:我们找到之前删除文件--本地数据中;\
比如说我们本地代码已经退回来了,现在从最初的版本号(肯定比现在的commit低),我们重新提交代码,看看会发生什么事情》
会因为版本号低而变化吗;\
果然:人家拒绝了;\
然而不行的:
我直接是将本地开始的数据变成强制提交
git push --force
所以,对于开发
提交异常的commit,如何解决:
第一种方法
本地分支拿到所有的版本号:
git reflog 左侧的就是
开始版本穿越: git reset --hard 版本号(要提交之前最近的版本号)
穿越完成之后,本地代码显示提交之前的,开始进行开发 开发完毕直接将文件commit file,由于版本号的低肯定会push失败; 我们强制push就可以成功;
git push --force
然后就会成功的; 第二种方法: 但是也可以直接重新拉取master代码,从新开发,要是开发量比较细就可以的;\
revert:表示当前一个提交是作废的,我们直接可以将再次提交作废;\
会使得本地的提交commit失效,然后我们呢直接将数据push到远端,就可以将之前的数据改变了;\
问题4:
标准的如果,我现在在开发,领导让我改一个bug,但是我又想保存我现在的已经写好的代码,又不想丢掉对吧;(暂存代码) git stash 暂存起来
git stash pop 捞出来\
实例:
我们开始写一点数据参数;然后给它放到暂存区域;
1.新增需求的我,正在加急的写代码中;\
但是这时候一个满脸清纯的程序媛走过来说,可能帮我调个bug吗,(乐于助人,怎么能拒绝呢),哈哈,但我已经写了一上午的代码,还没能开始调试,我又不想提交,怎么办呢,(又不能直接拒绝,结束单身的机会,怎么能不把握好),幸好,卢卡我知道;
IDEA 有代码输入行,就是类似于cmd
git stash //将代码放入暂存区域\
然后发现我的工作空间里面现在,没有了我之前的代码了,不会丢了吧(不用担心,是被保存起来了);
然后我们切换分支,给他解决一下问题;
然后我们来本地lucas的代码中看看
关于已经提交的commit的,我们直接是将期变化成撤销;
www.baidu.com/index.php?t…
--soft 不删除工作空间的改动代码 ,撤销commit,不撤销git add file
关于参数:
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。 –soft
不删除工作空间改动代码,撤销commit,不撤销git add . –hard
删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
git reset --mixed HEAD~1 或者是n 顺便说一下,如果commit注释写错了,只是想改一下注释,只需要: git commit --amend 1 此时会进入默认vim编辑器,修改注释完毕后保存就好了。\
问题5:
如果说master的版本特殊号是1.0.0,但是我使用的本地分支lucas版本是3.0.0,
但是每次我要从master拉取最新的代码,肯定会遇到的问题就是冲突;
有什么好的方法呢;
首先是我将lucas的文件版本号改变成3.0.0.,如图所示;\
但是master的已经有了新的文件,所有我需要更新;
第一种方式:
我们开始保存本地,然后直接切换分支开始进行
但是出现问题弹框了;\
就是我们之前的版本号差异造成的,force checkout会导致新增的版本号直接丢失的,
所以,我们将数据直接试一下smart checkout\
类似于:
git stash 暂存改变
git stash pop 显示\
一般会出现三个展示的代码框;\
然后我们选择保存就可以,一般就是选择自己本地的呗,哈哈
第二种方法:
暂存本地所有的stash 哈哈; git -->repository-->stash changes 给一个message标识--->然后切换分支master开始拉去最新的数据; 然后开始合并,到lucas,记住这里肯定会出现conflicts ,(合并之后,我们将之前修改的代码还原,也就是暂存区域中取出);\
这是已经将master的新增代码合并到lucas的开发分支上;
我们将数据直接变成-----开始还原暂存区的;\
view :\
直接回复之前的stash; 没有冲突,庆幸一点;\
lucas的开始作妖了:
将本地的代码继续改变,然后保存看能否发生冲突;\
切换分支到master然后开始拉去master最新的代码
(因为lucas的代码我没有提交,合并的master的来源,所有直接切换就可以)\
这是新改变好的数据--lucas,然后我们还原看一下;\
还原失败了;\
Please move or remove them before you merge.
开始疯狂的尝试;\
细心的我准备了很多干活命令行;\
master分支\
版本号是1.0.0,
目前有两个分支,一个master分支,一个lucas的分支,master已经有了新的代码,我自己目前使用的是lucas的分支,第一版本号(常量)已经改了为3.0.0(master的版本号为1.0.0),而且我对lucas的分支已经有了整改(暂存起来Git stash)没有提交commit, 现在需要保存之后跳转到master分支上去拉取代码合并到lucas的分支上,合并之后,lucas的分支上已经有了最新的master分支的代码,但是,想要恢复之前暂存区里的代码(git stash pop)恢复一直是失败,提示是\
只能丢掉代码了吗;我之前写的好多;
git reset --hard 版本号;
切换到之前的版本再合并哈哈
合并之前必须先要提交本地的commit的整改; master分支有数据之后我们保存本地的修改commit开始数据整理; 然后合并的时候;;\
workspace.xml的文件----怎么忽略这些文件不被git管理;
IDEA git 忽略文件的几种方式\
不合适,idea取消git标记管理;\
然后关闭IDEA重启;git log\
如何本地修改代码之后,本地提交commit,然后提交的本地commit,但是提交了多余的文件,(本地提交了commit)---我们撤回本地commit怎么做呢;
git log 查看具体的提交记录;
git reset --soft commitId版本号; (取消你本地的提的commit,但是本地的代码不会变动,需要你重新修改后提交)\
本地提交的记录也会消失,
总结:
本地修改了代码,但是现在需要我们开发新需求所以,切换分支,但是为了避免我们写的代码失效(我们本地提交一个commit,然后拥有了一个commit的ID,)
然后我们再去干别的事情;
等到切回我们的分支的时候,我们将之前本地提交 的commit还原回来;接着开发,先备份一下,因为还原的时候,(本地代码不会发生改变,也就是会保存之前已经存在的;)
具体操作:
比如我们现在提交了三次本地commit;分别是1,2,3;
类似于这样的;\
然后我们要撤销3的commit提交,回退到2;
git log
git reset --soft 2的commidId ;
本地代码没有改变,但是本地的commit已经撤销了; 如何解决已经提交到远程的commit,已经push远程的呢;\
一次push,将本地所有的commit都提交到远程的分支了;\
如何撤回呢; git log 查看具体的提交记录
git reset --hard 记录id
切换版本到提交前的一个版本, 特殊的,这里的-- hard ,会直接将回退到之前的版本(本地的代码也会修改,--soft的本地不会被修改); 然后\
将数据版本直接回退了,然后我们重新提交,看一下远程的记录;\
版本比较低的原因,肯定提交不成功;
所有强制提交;
git push --force\
终于圆满结束了;
git实操:
如果说已经被变化的数据,和已经改变好了的数据你没有及时的拉取,
但是当你push到远程的时候已经就会push不成功:\
Your local changes to the following files would be overwritten by merge:
你本地的分支需要覆盖,因为之前有变动,版本号已经低了;(你现在提交的版本号很低)
解决方式:
先提交好你的文件,或者说是commit你的文件;\
git stash 暂存已经修改;
然后就会回到之前的一个版本号,git pull 文件 然后在git stash pop 还原文件,会有冲突解决就好了; 哈哈
然后准备提交git push 但是一般提交会有两个的;\
卢卡寄语
这篇Git的实战,根据上文Git的基础来,适合新手小白进行开发时候的一些问题, 希望我们都在研发的道路上越走越远,加油
转载自:https://juejin.cn/post/6991857849206833182