gpt4 book ai didi

git - git push --force-with-lease 总是安全的吗?

转载 作者:行者123 更新时间:2023-12-03 15:48:59 28 4
gpt4 key购买 nike

我一直遵循的规则是,一旦将 git 历史推送到远程存储库,就不要修改它。

但我想知道是否交互式 rebase 到 push --force-with-lease 绕过了这个规则?

如果强制租赁成功,其他用户是否完全安全,或者此策略是否有任何警告?

预先感谢您提供任何意见。

最佳答案

我想描述一个合理的案例,其中 --force-with-lease不会让您免于覆盖同事的工作。

一切从鲍勃开始

在 checkout 最新的主分支时执行以下操作:

# Creating a new branch called feature/one
$ git checkout -b feature/one

# Do some changes and git add ...
$ git commit

# Push for the first time
$ git push --set-upstream origin feature/one

# Checkout another branch to work on something else

鲍勃机器上的情况
...--F--G--H   <-- master (HEAD)
\
o--o <-- feature/one

爱丽丝继续

爱丽丝拿起功能/一个的工作,并在鲍勃的工作之上提交东西并 push 她的更改,平均而言
一些不相​​关的 pull 请求被 merge 到主分支。
Alice 的工作树是什么样子的
...--F--G--H--I--J   <-- master (HEAD)
\
o--o--x--x <-- feature/one

鲍勃继续

Bob 的任务是在当前的 master 分支上重新调整 Alices 的工作,并执行以下操作
  • git pull而他在 master 分支上,基本上是一个 git fetch和一个 git merge 这一步的结果在以后很重要。

    Bob 机器上的情况:
    ...--F--G--H--I--J   <-- master (HEAD)
    \
    o--o <-- feature/one
    ...--F--G--H--I--J   <-- origin/master (HEAD)
    \
    o--o--x--x <-- origin/feature/one

    Bob 的机器现在包含一个最新的 Remote ,但 origin/feature/one 中的更改尚未 merge 到
    功能/一个。
  • Bob 使用 git checkout feature/one checkout 分支
  • Bob 忘记做一个 git pull
  • Bob 使用 git rebase -i origin/master 将他的本地分支重新建立在 master 上

    bob 机器上的情况是这样的:
    ...--F--G--H--I--J   <-- master (HEAD)
    \
    o--o <-- feature/one
  • Bob 认为他成功地重新定位了他的分支并强制推送 feature/oneorigin/feature/one , 因为
    鲍勃是个好人,他用 git push --force-with-lease origin feature/one push 并希望该选项
    --force-with-lease如果他要覆盖其他人的工作,将阻止他的推送操作。
    但选项不会救他 ,如果我明白
    this blog post正确,--force-with-lease看不到
    Bob 机器上的原点/特征/一与实际的原点/特征/一之间的差异,因此假设
    如果强制推送到远程,Bob 的工作树将不会覆盖远程上的任何内容。缺货的原因
    区别在于执行隐式git fetch作为 git pull 的一部分早些时候(在此的第 1 步中
    部分)在不同的分支上。

    推送后, Remote 看起来像这样
    ...--F--G--H--I--J   <-- master (HEAD)
    \
    o--o <-- feature/one

    代替
    ...--F--G--H--I--J   <-- master (HEAD)
    \
    o--o--x--x <-- feature/one

    这是上面链接的博客文章的相关部分:

    The fetch will pull the objects and refs from the remote, but without a matching merge does not update the working tree. This will make it look as if the working copy of the remote is up to date with the remote without actually including the new work, and trick --force-with-lease into overwriting the remote branch

  • 关于git - git push --force-with-lease 总是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309402/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com