前面的博文简单介绍了Git的基本知识和常见用法,链接如下:
- 《Git基础知识之内部状态管理系统》 https://www.cnblogs.com/phillee/p/14598437.html
- 《Git 基本操作之简明指南》 https://www.cnblogs.com/phillee/p/14516406.html
- 《Git基本操作之远程仓库下载与保存、本地仓库初始化并推送》 https://www.cnblogs.com/phillee/p/10610687.html
- 《Git基本操作之Terminal命令行新建仓库并推送到远程仓库》 https://www.cnblogs.com/phillee/p/14308137.html
- 《Git基本操作之项目自定义配置、游离分支保存、忽略规则、本地与远程仓库同步及代理服务器问题》 https://www.cnblogs.com/phillee/p/11497726.html
- 《通过Git在本地局域网中的两台电脑间同步代码》 https://www.cnblogs.com/phillee/p/15353020.html
0.前言
git中有一些如果操作不当容易出大问题的命令,例如git push -f
。git push -f
是一个需要特别谨慎对待的指令。因为它完全无视先来后到的规则,会将提交历史一并覆盖掉。
非特殊情况不建议使用,每次使用前请务必确认你知道自己在做什么,保持头脑清醒。
1.基本使用方法
有时候仓库commit的历史记录真的太乱了,想要借助rebase指令好好整理一下,因为它修改的是已经发生的事实,正常来说是无法推送的,而使用强制推送就能解决这个问题。
基本语法如下
git push <远程主机名> <本地分支名>
如果想将本地的 master 分支推送到 origin 主机的 master 分支,可以使用以下指令
$ git push origin master # 等价于:git push origin master:master
如果本地版本与远程版本有差异,但又要强制推送,使用 --force 参数:
$ git push --force origin master
再一次强调:除非只有自己一个人用,不然不建议使用git push --force
。
2.有可能出现的问题
2.1 non-fast-forward
错误
这不,我在前几天使用时就出现了一点小问题,不过也没造成什么影响,解决方案一并附上。当时是想进行局域网中不同机器之间的代码同步,详见 通过Git在本地局域网中的两台电脑间同步代码。
问题描述
cv:mylocalrepo.git cv$ git push -f
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To file:///Users/cv/misc_codes/myrepo.git
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'file:///Users/cv/misc_codes/myrepo.git'
解决方案
进入中转仓库,查看 config 信息,[receive] 一栏的denyNonFastforwards = true
是默认值,可以手动修改为false。
这时再在本机或者另外一台机器的克隆仓库进行push就没有问题了。
(全文完)
参考资料
[1] git push rejected: error: failed to push some refs https://stackoverflow.com/questions/9832348/git-push-rejected-error-failed-to-push-some-refs
[2] Denying non-fast-forward and SourceForge https://pete.akeo.ie/2011/02/denying-non-fast-forward-and.html
本文作者 :phillee
发表日期 :2021年9月29日
本文链接 :https://www.cnblogs.com/phillee/p/15352893.html
版权声明 :自由转载-非商用-非衍生-保持署名(创意共享3.0许可协议/CC BY-NC-SA 3.0)。转载请注明出处!
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
感谢您的支持
微信支付