小编典典

强制更新后 Git 拉取

all

我只是压缩了一些提交git rebase并做了一个git push --force(我知道这是邪恶的)。

现在其他软件工程师有不同的历史,当他们做 a 时git pull,Git 将合并。有没有办法解决这个问题,除了做一个rm my-repo; git clone git@example.org:my-repo.git

我需要类似的相反的东西git push --force,但git pull --force没有给出预期的结果。


阅读 114

收藏
2022-03-21

共1个答案

小编典典

接收新的提交

git fetch

重置

您可以使用 重置本地分支的提交git reset

要更改本地分支的提交:

git reset origin/main --hard

不过要小心,正如文档所说:

重置索引和工作树。自 以来对工作树中跟踪文件的任何更改都将被丢弃。

如果您想实际保留本地所做的任何更改 - 请--soft改为重置。这将更新分支的提交历史记录,但不会更改工作目录中的任何文件(然后您可以提交它们)。

变基

您可以使用以下命令在任何其他提交/分支之上重播本地提交git rebase

git rebase -i origin/main

这将在交互模式下调用变基,您可以在其中选择如何应用不在您要变基的历史记录中的每个单独的提交。

如果您删除的提交(带有git push -f)已经被拉入本地历史记录,它们将被列为将被重新应用的提交 -
它们需要作为变基的一部分被删除,或者它们将被简单地重新包含到历史记录中对于分支 - 并在下次推送时重新出现在远程历史记录中。

使用帮助git command --help以获取有关上述任何(或其他)命令的更多详细信息和示例。

2022-03-21