2

注意:我知道git push -f问题很常见,但我真的无法在任何地方轻松找到这个特定问题的答案。我想要一个全面的答案,而不仅仅是在某种程度上解决我的问题的东西。在问题的最后,我自己提出了一个解决方案。

我已经将一些更改推送到我不应该(在工作中)的分支。我已经git revert修改了更改,但其中一位团队协调员实际上希望我git reset <old commit> && git push -f这样做,这样历史记录就不会被还原提交弄乱。很少有人使用那个分支,所以我们认为值得冒险。

它起作用了,但我担心已经拉过我提交的人可能会不小心再次快进远程分支,因为历史还没有分歧(我只是重置为旧的提交,但没有做任何其他在那个之上提交)。

我注意到,如果我git reset <old HEAD commit> && git status,Git 说它是在 之前的几个提交origin/<branch>,所以我确定如果我git push再次提交,Git 会快进它。

git pull说回购是最新的并且不会回溯(无论如何我认为它不应该这样做)。但是,我应该怎么做才能确保每个人都回到正确的 HEADorigin/<branch>并从那里开始工作?git reset origin/<branch>在恢复该分支机构的工作之前,我是否需要要求所有人?我真的想要一些更容易且不易出错的东西(他们可能会忘记这样做)。

我知道我不应该 git 重置共享仓库上的分支,但你知道它是怎么回事...无论如何教育经验:P

4

1 回答 1

3

您确实必须与可能推送到该分支的每个人进行沟通,以了解恢复已经发生,他们应该同步他们的本地存储库。

可以尝试一些花哨的 git hooks 来防止任何人重新推送无效的提交。但是,如果它像您说的那样是一个很少使用的分支,那么您最好只依靠通信(在任何情况下都应该这样做)。

对于共享分支的干净结帐:

git reset origin/<branch>

应该做的伎俩。

如果有人已经在错误提交之上构建了一个分支,则有必要从本地历史记录中删除错误提交,以防止它再次被推送到上游。这可以通过git rebase交互选项来完成:

git rebase -i origin/<branch>

这将向用户显示对本地分支的提交列表,因为它与上游不同。错误提交将出现在此列表中,应将其删除。

于 2013-04-19T15:59:57.197 回答