likes
comments
collection
share

Git实操从0到1| 8月更文挑战

作者站长头像
站长
· 阅读数 53

欢迎关注公众号:卢卡多多

git实战教学


1.背景:

今天在我使用git作为提交的时候,一不小心提交了79个文件,但是我改的文件事2个,以至于多个commit的,都被我直接提交了远程仓库----(好多日志的文件,老大估计又得发飙),还好是我自己的分支,可以回退版本,但是远程的代码怎么办呢; 今天问题:

问题1:

当我修改了多个文件,但是我只想提交其中的一个文件进行commit ,然后进行push?标准的流程是怎么样的;(如何避免日志的提交) 开始新建仓库,直接在目录中拉取代码:

git init 目录初始化仓库

Git实操从0到1| 8月更文挑战 git clone 拿到具体的链接地址,开始使用

实例: git clone gitee.com/lucasweb/te… testdemo01

表示克隆---》原地址---》现在的目录名 进入具体的源码目录,记住是要进入git管理的目录; 开始新建一个分支(切换分支,因为拉取代码的都是master分支)

Git实操从0到1| 8月更文挑战

上述可以找到具体的git 中有许多的分支,我们开始自己新建一个; 开始利用idea直接将git管理的数据打开: C:\Users\web\Desktop\testgit\testdemo01 这是地址, 桌面的地址web/deskTop\

Git实操从0到1| 8月更文挑战 打开是这样的表示,默认是master分支,但是我们还具体的还没开始,我们创建了几个包名,供我们开始测试 我们先是写一个素材,放入master的分支中:\

Git实操从0到1| 8月更文挑战 红色的代表:没有被Git管理的文件; 绿色的代表已经被Git管理的文件 ,我们来看看,绿色的文件直接提交,master2文件提交到master2远程分支上\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 需要远程push的\

Git实操从0到1| 8月更文挑战 提交之后,我们看看远程\

Git实操从0到1| 8月更文挑战

明明我选择的是一个,但是他提交的就是两个,也就是说,push会把之前没有push的从commit的,直接提交过去;

Git实操从0到1| 8月更文挑战 为了解决疑惑,我有开始了提交了两个commit,看一下我这次push:\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 只提交了一个commit; 但是;\

Git实操从0到1| 8月更文挑战 显示直接全部提交; 事实证明,push一次会把之前所有的commi都提交的; 怎么避免每次都提交一个commit,也就是我可以失效commit(撤销提交的commit)来使用 已经蒙了???? 2.新建分支切换去合并代码 由于之前是在master开发,有很大的风险,然后我们就开始在新的分支上开发然后合并或者是review导master上面 git checkout -b lucas 新建一个分支并且跳过去; 或者是IDEA,右下角\

Git实操从0到1| 8月更文挑战 开始切换成功;\

Git实操从0到1| 8月更文挑战 ,因为自己新建的分支---,可以将master的代码直接合并到新建的lucas上面; 合并master代码: (我们分支A需要master的最新的代码,可以直接Git merge 分支名);\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 本地开发lucas\

问题2:

当我本地的数据要更新master的代码,如何算是标准的merge到合并到自己的分支(如果是多余的文件,或者说是已经删除的代码信息呢)

Git实操从0到1| 8月更文挑战

然后master改造完毕; 我们直接跳回去lucas,看已经commit的代码能否保存(但是没有push)\

Git实操从0到1| 8月更文挑战 master中commit的所有集合都合并过来了,包括新增和修改;\

Git实操从0到1| 8月更文挑战 虽然说已经是可以的数据,但是,突然发现master本地提交的代码有问题,我想撤销之前提交的commit; git reset --soft HEAD~n 可以将之前已经提交的commit撤销回来,(保存本地代码不变,add也不变)

问题3:


如果说我提交了一个commit ,而且已经push了,但是我发现数据是错的,我要重新退回本地---重新修改;(也就是撤销远程仓库的代码已经push的代码); 本地开发lucas;

但是我们开始了我们的创作之旅,首先是分支,在lucas上,我们创建了两个commit,一个push之后,数据直接将全部提交了,但是,注意,我提交的文件多了,错误了(“和上午一样一下子日志也给提交了”),但是现在,lucas上的提交记录

Git实操从0到1| 8月更文挑战 上述的图片中有很多的干货: git reflog 显示所有的提交;

我们能看到左侧是 commitId(版本号),可以直接回退版本; 提交了两次,还有一次是合并到lucas

现在是lucas 的提交记录

怎么样撤回远程仓库的代码已经push的代码两次commit的代码;\

Git实操从0到1| 8月更文挑战 reset; revert 我们先来测试git reset 是干嘛的;

Git实操从0到1| 8月更文挑战 git reset 由于近期的护网行动,我们公司使用的是一个外网的地址,我提交的文件还有错误,所以这里我就开始讲版本回退,重新提交commit ,然后是将数据直接变成-- 强制push git push --force 就可以成功\

Git实操从0到1| 8月更文挑战 修改仓库地址 因为提交的时候要修改仓库地址,外网的地址和内网的地址是不一样的,所以我们直接使用,\

Git实操从0到1| 8月更文挑战 git remote 查看仓库信息 显示 出的结果“orgin”

git remote set-url orgin 新的地址

首先搜索一下:(百度需要你的信息)\

Git实操从0到1| 8月更文挑战 我们测试的是 soft Git实操从0到1| 8月更文挑战 版本穿越: 本地代码会找回来,; @#请求版本号; git reflog git log

Git实操从0到1| 8月更文挑战 git rest --hard 版本号

目前已经删除的最近的commit的显示;-然后我们穿越回去;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 通过版本穿越:我们找到之前删除文件--本地数据中;\

Git实操从0到1| 8月更文挑战 比如说我们本地代码已经退回来了,现在从最初的版本号(肯定比现在的commit低),我们重新提交代码,看看会发生什么事情》 会因为版本号低而变化吗;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 果然:人家拒绝了;\

Git实操从0到1| 8月更文挑战 然而不行的: 我直接是将本地开始的数据变成强制提交 git push --force

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 所以,对于开发 提交异常的commit,如何解决: 第一种方法 本地分支拿到所有的版本号: git reflog 左侧的就是

开始版本穿越: git reset --hard 版本号(要提交之前最近的版本号)

穿越完成之后,本地代码显示提交之前的,开始进行开发 开发完毕直接将文件commit file,由于版本号的低肯定会push失败; 我们强制push就可以成功;

git push --force

然后就会成功的; 第二种方法: 但是也可以直接重新拉取master代码,从新开发,要是开发量比较细就可以的;\

Git实操从0到1| 8月更文挑战 revert:表示当前一个提交是作废的,我们直接可以将再次提交作废;\

Git实操从0到1| 8月更文挑战 会使得本地的提交commit失效,然后我们呢直接将数据push到远端,就可以将之前的数据改变了;\

Git实操从0到1| 8月更文挑战

问题4:


标准的如果,我现在在开发,领导让我改一个bug,但是我又想保存我现在的已经写好的代码,又不想丢掉对吧;(暂存代码) git stash 暂存起来

git stash pop 捞出来\

Git实操从0到1| 8月更文挑战 实例: 我们开始写一点数据参数;然后给它放到暂存区域; 1.新增需求的我,正在加急的写代码中;\

Git实操从0到1| 8月更文挑战 但是这时候一个满脸清纯的程序媛走过来说,可能帮我调个bug吗,(乐于助人,怎么能拒绝呢),哈哈,但我已经写了一上午的代码,还没能开始调试,我又不想提交,怎么办呢,(又不能直接拒绝,结束单身的机会,怎么能不把握好),幸好,卢卡我知道; IDEA 有代码输入行,就是类似于cmd git stash //将代码放入暂存区域\

Git实操从0到1| 8月更文挑战 然后发现我的工作空间里面现在,没有了我之前的代码了,不会丢了吧(不用担心,是被保存起来了); 然后我们切换分支,给他解决一下问题; 然后我们来本地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编辑器,修改注释完毕后保存就好了。\

Git实操从0到1| 8月更文挑战 问题5: 如果说master的版本特殊号是1.0.0,但是我使用的本地分支lucas版本是3.0.0, 但是每次我要从master拉取最新的代码,肯定会遇到的问题就是冲突; 有什么好的方法呢; 首先是我将lucas的文件版本号改变成3.0.0.,如图所示;\

Git实操从0到1| 8月更文挑战 但是master的已经有了新的文件,所有我需要更新; 第一种方式: 我们开始保存本地,然后直接切换分支开始进行 但是出现问题弹框了;\

Git实操从0到1| 8月更文挑战 就是我们之前的版本号差异造成的,force checkout会导致新增的版本号直接丢失的, 所以,我们将数据直接试一下smart checkout\

Git实操从0到1| 8月更文挑战 类似于: git stash 暂存改变

Git实操从0到1| 8月更文挑战 git stash pop 显示\

Git实操从0到1| 8月更文挑战 一般会出现三个展示的代码框;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 然后我们选择保存就可以,一般就是选择自己本地的呗,哈哈 第二种方法:

暂存本地所有的stash 哈哈; git -->repository-->stash changes 给一个message标识--->然后切换分支master开始拉去最新的数据; 然后开始合并,到lucas,记住这里肯定会出现conflicts ,(合并之后,我们将之前修改的代码还原,也就是暂存区域中取出);\

Git实操从0到1| 8月更文挑战 这是已经将master的新增代码合并到lucas的开发分支上; 我们将数据直接变成-----开始还原暂存区的;\

Git实操从0到1| 8月更文挑战 view :\

Git实操从0到1| 8月更文挑战

直接回复之前的stash; 没有冲突,庆幸一点;\

Git实操从0到1| 8月更文挑战 lucas的开始作妖了: 将本地的代码继续改变,然后保存看能否发生冲突;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 切换分支到master然后开始拉去master最新的代码 (因为lucas的代码我没有提交,合并的master的来源,所有直接切换就可以)\

Git实操从0到1| 8月更文挑战 这是新改变好的数据--lucas,然后我们还原看一下;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 还原失败了;\

Git实操从0到1| 8月更文挑战 Please move or remove them before you merge. 开始疯狂的尝试;\

细心的我准备了很多干活命令行;\

Git实操从0到1| 8月更文挑战 master分支\

Git实操从0到1| 8月更文挑战 版本号是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实操从0到1| 8月更文挑战 只能丢掉代码了吗;我之前写的好多; git reset --hard 版本号; 切换到之前的版本再合并哈哈

合并之前必须先要提交本地的commit的整改; master分支有数据之后我们保存本地的修改commit开始数据整理; 然后合并的时候;;\

Git实操从0到1| 8月更文挑战 workspace.xml的文件----怎么忽略这些文件不被git管理; IDEA git 忽略文件的几种方式\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 不合适,idea取消git标记管理;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 然后关闭IDEA重启;git log\

Git实操从0到1| 8月更文挑战 如何本地修改代码之后,本地提交commit,然后提交的本地commit,但是提交了多余的文件,(本地提交了commit)---我们撤回本地commit怎么做呢; git log 查看具体的提交记录;

git reset --soft commitId版本号; (取消你本地的提的commit,但是本地的代码不会变动,需要你重新修改后提交)\

Git实操从0到1| 8月更文挑战 本地提交的记录也会消失, 总结: 本地修改了代码,但是现在需要我们开发新需求所以,切换分支,但是为了避免我们写的代码失效(我们本地提交一个commit,然后拥有了一个commit的ID,) 然后我们再去干别的事情; 等到切回我们的分支的时候,我们将之前本地提交 的commit还原回来;接着开发,先备份一下,因为还原的时候,(本地代码不会发生改变,也就是会保存之前已经存在的;) 具体操作: 比如我们现在提交了三次本地commit;分别是1,2,3; 类似于这样的;\

Git实操从0到1| 8月更文挑战

Git实操从0到1| 8月更文挑战 然后我们要撤销3的commit提交,回退到2; git log

git reset --soft 2的commidId ;

本地代码没有改变,但是本地的commit已经撤销了; 如何解决已经提交到远程的commit,已经push远程的呢;\

Git实操从0到1| 8月更文挑战 一次push,将本地所有的commit都提交到远程的分支了;\

如何撤回呢; git log 查看具体的提交记录

git reset --hard 记录id

切换版本到提交前的一个版本, 特殊的,这里的-- hard ,会直接将回退到之前的版本(本地的代码也会修改,--soft的本地不会被修改); 然后\

Git实操从0到1| 8月更文挑战 将数据版本直接回退了,然后我们重新提交,看一下远程的记录;\

Git实操从0到1| 8月更文挑战 版本比较低的原因,肯定提交不成功; 所有强制提交; git push --force\

Git实操从0到1| 8月更文挑战 终于圆满结束了; git实操: 如果说已经被变化的数据,和已经改变好了的数据你没有及时的拉取, 但是当你push到远程的时候已经就会push不成功:\

Git实操从0到1| 8月更文挑战 Your local changes to the following files would be overwritten by merge: 你本地的分支需要覆盖,因为之前有变动,版本号已经低了;(你现在提交的版本号很低) 解决方式: 先提交好你的文件,或者说是commit你的文件;\

Git实操从0到1| 8月更文挑战 git stash 暂存已经修改;

然后就会回到之前的一个版本号,git pull 文件 然后在git stash pop 还原文件,会有冲突解决就好了; 哈哈

然后准备提交git push 但是一般提交会有两个的;\

卢卡寄语

这篇Git的实战,根据上文Git的基础来,适合新手小白进行开发时候的一些问题, 希望我们都在研发的道路上越走越远,加油

转载自:https://juejin.cn/post/6991857849206833182
评论
请登录