gpt4 book ai didi

git - 在有人将 rebase 或重置推送到已发布的分支后,我如何恢复/重新同步?

转载 作者:IT王子 更新时间:2023-10-29 00:31:50 31 4
gpt4 key购买 nike

我们都听说过,永远不要对已发布的作品进行 rebase,它很危险等等。但是,我还没有看到任何关于如何处理这种情况的食谱,以防发布 rebase .

现在,请注意,只有当存储库仅由已知(最好是少数)人群克隆时,这才是真正可行的,这样无论谁 push rebase 或重置,都可以通知其他人他们需要注意下次他们获取(!)。

如果您没有在 foo 上进行本地提交并且它会 rebase ,我看到的一个明显的解决方案将起作用:

git fetch
git checkout foo
git reset --hard origin/foo

这将简单地丢弃 foo 的本地状态,以支持其根据远程存储库的历史记录。

但是,如果在该分支上提交了实质性的本地更改,该如何处理这种情况呢?

最佳答案

在大多数情况下,在推送 rebase 后恢复同步实际上并不那么复杂。

git checkout foo
git branch old-foo origin/foo # BEFORE fetching!!
git fetch
git rebase --onto origin/foo old-foo foo
git branch -D old-foo

即。首先,您为远程分支最初所在的位置设置了一个书签,然后您使用它来重放从该点开始的本地提交到 rebased 远程分支。

rebase 就像暴力:如果它不能解决你的问题,你只需要更多。 ☺

当然,如果您查找 rebase 前的 origin/foo 提交 ID 并使用它,您当然可以在没有书签的情况下执行此操作。

这也是您如何处理在提取之前忘记制作书签的情况。什么都没有丢失——你只需要检查远程分支的 reflog:

git reflog show origin/foo | awk '
PRINT_NEXT==1 { print $1; exit }
/fetch: forced-update/ { PRINT_NEXT=1 }'

这将打印 origin/foo 在更改其历史记录的最新提取之前指向的提交 ID。

然后你可以简单地

git rebase --onto origin/foo <i>$commit</i> foo

关于git - 在有人将 rebase 或重置推送到已发布的分支后,我如何恢复/重新同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084868/

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