一、不同开发场景的版本回退
如果提交了一个错误的版本到远程分支,怎么回退远程分支版本?
如果提交了一个错误的版本到公共远程分支,又该怎么回退版本?
1. 一个人撸代码,啥都不用管,自己开心就好
- 首先回退本地分支
git reflog --date=iso // 找到要回退的版本的commit id
git reset --hard f13567b // 回退版本 .删除的分支也可以用这个找回啊
- 然后回退远程分支
git push origin report-front -f // 将本地master push 到远程版本库中, -f 强制覆盖。
2、多人开发合作,要多费点神喽~~~
引入问题:回滚公共远程分支和回滚自己的远程分支的区别: 你会把别人的代码弄丢掉的~~
来,这里看图---->>>>
我版本回退后,把同事代码弄丢了,线上最新的代码只有 A1时候 的代码。。。
回退的两种方法:
(1)有点费神的回退
git checkout B_branch //先回到自己的分支
git reflog //接着看看当前的commit id,例如:0bbbbb
git reset --hard B1 //回到被覆盖的那次提交B1
git checkout -b B_backup //拉个分支,用于保存之前因为回退版本被覆盖掉的提交B1
git checkout B_branch //拉完分支,迅速回到自己分支
git reset --hard 0bbbbbb //马上回到自己分支的最前端
哈哈~~~终于找到自己提交的代码了
来,B在合一下master最新的代码,就阔以了
git reset --hard origin/master
git checkout master //切换到master
git merge B_backup //再合并一次带有B1的分支到master
使用git reset回退公共远程分支的版本后,需要其他所有人手动用远程master分支覆盖本地master分支,太烦了~~
(2)优雅的回退
git revert HEAD //撤销最近一次提交
git revert HEAD~1 //撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc //撤销0ffaacc这次提交
git revert 命令意思是撤销某次提交。它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的,所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。
- revert 是撤销一次提交,所以后面的commit id是你需要回滚到的版本的前一次提交
- 使用revert HEAD是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的
- 使用revert HEAD~1 表示撤销最近2次提交,这个数字是从0开始的,如果你之前撤销过产生了commi id,那么也会计算在内的。
- 如果使用 revert 撤销的不是最近一次提交,那么一定会有代码冲突,需要你合并代码,合并代码只需要把当前的代码全部去掉,保留之前版本的代码就可以了.
git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。
二、.gitignore文件
- 给项目添加.gitignore
只需要在.git同目录下新增.gitignore文件,然后添加不需要上次的目录即可 - 清除已经上传的多余文件
如果你添加.gitignore的时候,git里面已经上传了很多不需要的文件,则使用下面两个命令
如果是文件夹:git rm -r --cached 文件夹名
如果是文件:git rm --cached 文件名