git push -f 实战使用

Git Push

git 常用命令流程图如下:
在这里插入图片描述

git push命令用于将本地分支的更新,推送到远程主机。

$ git push <远程主机名> <本地分支名>:<远程分支名>

git push origin lhf/dev/1.0

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
git push
是把本地的所有分支内容 推送到 匹配的远程分支

Git Push -f

一种情况

springboot 微服务项目中,我在更新一个模块的接口,改好后,git commit,git push 到远程分支,打包部署到服务器,但是验证出了 bug ,这时候就要改动刚写的接口,改完后,为了避免出现太多的commit会在本地合并 又修改后的提交记录到之前的提交,但是合并之后,就会和远程的分支commit记录产生冲突,这时候git push 是会报错的,必须使用git push -f 强制覆盖掉远程分支的内容

如果远程主机的版本比本地版本更新,推送时Git会报错
要求先在本地做git pull合并差异然后再推送到远程主机。这是正常合理的代码提交流程。

如果你一定要推送,可以使用–force选项。

注意

使用–force选项,导致远程主机上更新的版本被覆盖。

如果没有指定 强制push的 分支,可能会把所有的本地分支强制覆盖远程分支,同事之前推送的代码会被你抹掉。如果大家都不小心更新你的版本,OMG,前功尽弃。 除非你很确定要这样做,否则应该尽量避免使用–force选项。

在 idea 的 terminal 中 git push 是把当前所在的分支,推送到远程分支
在 a 分支也可以  git push origin b  将本地的 b 分支 推送到 远程 b 分支

安全的使用 –force 选项

只给自己用,要坑就坑自己

在工作的时候,通常会开一个分支出去做,但做完发现Commit 太过琐碎,便会想使用Rebase 来整理一下这个分支。虽然Rebase 是修改历史没错,但因为这个历史影响的范围只有我自己这个分支,所以并不会影响其它人正常使用:

$ git push origin features/my_branch -f 

只把当前分支强制推送到远程分支

这样只会强制更新features/my_branch这个分支的内容,不会影响其它分支。

点击操作 idea 中 git

在这里插入图片描述
在这里插入图片描述
可以选择把确定的分支push 或者 push -f
在这里插入图片描述

设置保护机制

但总是有人可能不小心使用了-f参数来Push,GitHub网站有提供保护机制,可以避免某个分支被Force Push。请到仓库的「Settings」页签,左边选择「Branches」,添加保护的规则;

同样,码云gitee.com等有也有样的设置(不过要付费企业项目);

不推荐

可以把远程的分支先删掉,然后本地改好后,推送到远程分支

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐