Bo2SS

Bo2SS

5 Git集成使用禁忌

39 | 禁止向集成分支执行 push -f 操作#

-f / --force:force update

场景:在本地和远端不是 fast-forwards 关系时,本地本来是不允许推送到远端的,但是,如果使用 git push -f 命令,就可以将本地强制更新到远端。

演示:强制抹掉远端的 commit。

先看看目前远端的 commit 记录:

image

以及本地的 commit 记录:

image

此时我们将本地版本重置到之前的某一个 commit,如 f21c98a,执行git reset --hard f21c98a ,然后再看一下本地的 commit 记录:

image

发现其之后的 commit 记录已经消失。

此时再进行推送:

image

直接 git push 肯定是不行的,但是加了 -f 之后成功推送了,再来看看远端的 commit 记录:

image

No!如果你是远端的另一个开发人员,看到这里会是什么感受?

那么有什么机制防止执行这种操作呢?可以自行搜索一下,Github 和 Gitlab 都提供了相应的保护机制。

📢此外,还可以通过 git reflog 找回刚刚丢失的分支,如下图红框所示:

image

然后利用 git reset --hard HAED@{n} 恢复喔~

40 | 禁止向集成分支执行变更历史的操作#

团队里公共的分支严禁做 rebase 操作

比如:

同事 A 通过 rebase 变更 commit 的 message 并推送到远端:

image

他在两个 commit 的 message 里加了 [feature] 前缀。

而另一位同事 B 在他变更前,就已经基于 origin/temp 分支同样创建了 test_rebase_inter 分支,并提交了 2 次新的 commit:

image

此时这位同事 B 想推送自己的更新,一定会遇到问题。

并且后面每一位已经在开发 test_rebase_inter 分支的同事都会遇到这个问题,他们还需要再用 rebase 来处理,这样带来了很多不必要的麻烦。

或者,找到同事 A,让他恢复原状,具体方法可参考上一节提到的 git reflog 方式。


rebase 适用场景之一:在还没有推送到远端的情况下,通过 rebase,把自己在本地的多次 commit,合并成一次 commit,再推送。

集成开发,铭记两点:不 push -f;不变更远端历史。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。