记录一下今天碰到的一个小问题
前因是基于'master'拉取了一个新分支来开发东西,但是我本地的最新的分支和远程的分支居然差着399个提交Σ(⊙▽⊙"a,而且要提交的东西我同事拉了最新的分支之后他哪儿是有的
++也就是说我本地的分支和线上的分支差着很多提交,但是++ 这些提交只存我本机,没有推送到远程
那么问题来了,我需要本地的这些更改之后正确的代码,但是我的提交是没有意义的,那怎么消除这些提交呢
1:更新本地的远程分支镜像,拿到远程最新状态
先查看已配置的远程仓库(大部分都是叫'origin',但查一下更放心)
git remote
输出的一般都是
```
origin
```
这个就是远程仓库名
拉取远程最新的状态(不执行 fetch,你看到的 origin/xxx 是旧缓存,重置会出错)
git fetch origin
注:origin 是远程仓库别名,不是分支,不要想着git fetch master就能拉倒最新的master,master是分支名称,origin是仓库名称,别搞混,如果你只想拉取master的话那就是:
git fetch origin/master
'/'不能省!!!!,必须这样写,你想拉其他的分支就把master换成那个分支名称即可
2:把本地分支强制对齐远程分支
重置本地分支到远程状态
⚠️ 注:你当前所在那个分支,执行的就是把你当前的分支对齐远程的你输入的分支,记得切换好分支再执行对齐
例:我想对齐本地的dev和远程的dev
那代码就是:先切换到dev,然后同步分支
git checkout dev
git reset --hard origin/dev
同步完之后本地的dev会强制同步为远程的dev,那个提交会消失不再提示
再强调一遍,这些操作的前提是:
1:远程的分支是最新最正确的
2:你本地的代码需要提交的更改都是远程分支更改过的
3:本地的提交都会丢失,没有你拉取之后二次更改的代码
因为reset的本质就把远程的某个分支覆盖掉本地的某个分支,所以本地那些更改都会消失
3:最后:一键校验全套命令(修复完必跑)
老规矩,先拉取一下最新的仓库
git fetch origin
然后branch -vv,这条命令会列出所有本地分支和对应的远程跟踪分支,看每一行后面状态,都是 up to date 就代表全部本地分支都和远程同步完毕
git branch -vv