14

我正在本地分支上进行一些更改,完成后我将所有内容推送到远程分支。在将分支与开发合并之前,我认为我应该做一个变基,因为其他人在那里合并了很多他们的代码。当我进行变基并解决了一些冲突时,我推送到了远程分支。不幸的是,我解决冲突的方式是错误的,所以现在我需要在变基发生之前返回,并将远程分支更新到新状态。

我试过的

  1. 重置头部

    git reset --hard HEAD@{x} //x 是变基之前的头部

这可以工作并恢复我的本地分支上的更改,但是我不知道要使远程分支更新到那个位置,因为它不会创建可以推送到远程的新提交。

4

2 回答 2

9

您不应该重写远程存储库的历史记录,因为如果

  1. 你推的东西坏了
  2. 有人拉
  3. 你强行推动不同的历史

您不仅会遇到必须修复混乱的问题,还会遇到其他所有撤消更改的问题。因此,除非您可以确定没有人拉它,否则不要执行 force-push

相反,您应该使用以下任一方式恢复提交

>> git revert HEAD@{y}   # where HEAD@{y} is the faulty commit

如果只有一个提交是混乱的,在合并的情况下。

如果 rebase 将多个提交转移到主分支上,您需要做

>> git revert --no-commit HEAD
>> git revert --no-commit HEAD~1
>> git revert --no-commit HEAD~2
   ...
>> git revert --no-commit HEAD@{x}
>> git commit -m "Sorry folks for the big mess I made"

所有的HEAD~y都是介于HEAD@{x}和之间的提交HEAD

这将在一个大提交中有效地撤消所有受影响的提交。

于 2012-11-22T14:23:48.080 回答
2

不要恐慌!只需在终端中按照这些步骤操作

git reflog 

或者

git log -g

这将在终端中显示以前的提交,例如

在此处输入图像描述

这里的提交被命名为 HEAD@{0}、HEAD@{1} 等等

git revert HEAD@{5}

完成。现在您可以像提交之前一样看到所有文件

于 2022-01-06T11:44:14.547 回答