小艾的自留地

Stay foolish, Stay hungry

最近遇到了一个Git Push 相关的问题,同事不小心把一些错误代码提交到仓库了。
如果每个人直接更新的话,会导致错误代码也更新到本地了。

这个时候想要避免这种情况的发生,唯一可以做的就是将那些错误代码直接覆盖掉。

git push -f

git push -f 这个命令的作用是将自己本地仓库的代码直接推送至仓库,完全以你的提交为准,之前其他人的提交都会被覆盖。

那么这么可怕的命令,究竟在什么情况下才适用呢?

使用时机

有两种情况下适合使用这个命令:

  1. 确定需要覆覆盖提交,就像上面的那种情况,在明确部分提交会导致异常时,可以使用新的提交去覆盖。
  2. 需要整理历史提交记录时,有时候项目的 Commit Logs 可能比较乱,不能清晰的看出每一次提交的作用,可以使用 rebase 命令来清理历史提交记录。因为改变了历史,所以正常来说是 push不成功的,所以需要使用 force push来解决这个问题。

默认分支保护

因为可能会出现不小心使用的情况,GithubGitlab这类源码托管网站会提供分支保护机制。可以避免某个分支被 force push,默认是 master为保护分支。

这里以Gitlab为例,设置->仓库->Protected Branches

所以如果想强制提交,前提需要取消对该分支的保护。

万一自己的代码被覆盖掉了,还救得回来吗?

其实也是有办法的,那就是换你或是其它有之前提交的同事,再次进行 git push -f,将正确的内容强制提交上去,覆盖上一次git push -f所造成的灾难。

参考链接

聽說 git push -f 這個指令很可怕,什麼情況可以使用它呢?

评论