今天维护一个比较久没有更新的系统时候,在发布到测试环境的时候出现一个问题,测试环境发布都是用git指令:
git pull origin 分支名
由于这台机器太久没有更新了,出现了报错:
error: Untracked working tree file 'vendor/autoload.php' would be overwritten by merge. Aborting
瞬间慌了~~~这可如何是好!查看一下log:
git log -3
差了N个版本,我不可能真的去merge吧~~~门都没有
查了一下git资料,终于解决问题了:
以下是强制更新分支的指令:
git fetch --all
git reset --hard origin/master
git pull origin 分支名
顺利发布了~~~趁着产品体验的功夫记录一下,
还有时间~~
如果需要查阅其他详细的指令,参考阮一峰老师的文章:常用 Git 命令清单
如果需要深入了解git原理,参考另一位大神的文章:Git深度解析
一直都是用工具发布代码,用工具管理项目分支,真正全git指令用得很少,到这里测试环境要自己发
那复习一下常用git指令吧:
首先有一个意识,基本你操作的都是你本地的分支,和远程的分支没啥关系,一般的指令随便搞没关系,删了也没事,再拉一下就好了,别删远程的分支就行了,不过我估计你也不知道删除远程分支的指令,所以不用担心,哈哈,随便搞,等你熟练了,指令里面带有origin的再小心一点吧
进入项目目录
首先要知道自己在什么分支
git branch
前面有个星号的就是你所在的分支
如果不是你的分支怎么办
git checkout -b 分支名
啥?你不知道分支名或者太长你打不出来
git remote show origin
找到自己分支名再执行上面的checkout吧
你以为分支对了就行了??看看分支提交的记录先吧
git log -3
后面的数字是显示最新的几条更新日志
如果是最新的当然没问题,如果不是最新的怎么办
一种是
git fetch
这种不太稳妥,有合并相关的不能更新
稳妥的方式
git pull origin 分支名
这个时候就是最新的了
如果不确定再git log确认一下
如果失败了,那就执行最上面的强制pull,到这里啥问题都解决了
如果你想只输出当前的分支名(如果你想写一些关于git自动操作的脚本,也许会用到),执行如下:
git name-rev --name-only HEAD //查看git当前分支
git remote -v //查看git拉取地址
以上是git发布代码的时候需要用到的指令
至于git commit git add git push这些现在还都是用工具在操作,
有需要的时候再更新吧
再更新两个很有用的指令:
在代码review的时候,想找出自己修改的那部分代码,一般用phpstorm的compare with branch操作,但是如果是别人修改的合并到你的分支,也会算到里面,不方便区分,这里有个执行很高效:
git whatchanged --since="2019-07-07" --author="author" --no-commit-id --name-only | sort | uniq
立马会列出从某个日期起,你在这个分支上的修改内容,当然还有另外一种写法,用 git diff --stat
git diff master --stat --name-only | sort 默认当前分支
git diff ‘your branch’ master --stat --name-only | sort 或者指定分支对比
注意先将master分支合并到该分支
另外一个是从你本地合并master的时候,需要merge,但是你此时不想merge,想要取消这次merge,不然你只能待在这个分支,切不到其他分支了,这里有个指令可以直接取消这次的merge
git merge --abort
如果你此时不想合并merge,又想切到其他的分支上,试试这个指令吧