Git Revert On Remote

时间:2016-08-31 01:50:51

标签: git

我是Git的新手并使用WebStorm推送和提取我的代码。我们正在开展一个共同的项目。拉特之夜,我的朋友更新了一些代码并推动了更改。

今天我删除了代码并合并了更改,并且错误地保留了我的更改并放弃了pull请求提供的更改。然后将这些更改推送到git remote ..

所以基本上现在我想要的是:

  1. 恢复到本地的先前状态,即拉取请求前的状态,也是遥控器上的状态,我想要与昨晚相同的状态,即推送请求之前的状态。
  2. 所以,这就是我想要做的事情:

    1. 将遥控器还原为以前的版本。
    2. 再次拉代码。
    3. 进行合并。
    4. 推送新代码。
    5. 现在,我正在使用Remote:

      • 我的朋友代码版本提交,
      • 然后我的错误版本提交没有包含先前代码提交的合并,
      • 如果我按照以下回复本地然后推送的答案,那么我会有新的恢复代码版本提交。但最后我想要远程1 + 3。

      让我们用数学方法看这个

      • X =我打开电脑并更改了代码的本地状态 提交。
      • Y =远程状态,我的朋友在他的本地计算机上进行了更改,并在昨晚推到了远程。
      • Z =远程状态,当我拉出我的朋友代码并开始合并但做了一些错误并丢弃了我的朋友的更改然后提交并将基本上是状态x的代码推送到远程。

      所以,基本上

      • 在我当地我有州Z.
      • 在遥控器上我有状态Z
      • 在我朋友的当地州Y.
        

      我想要远程X + Y.

2 个答案:

答案 0 :(得分:1)

如果要还原提交,可以使用以下命令:

git revert commit id goes here

示例:

git revert aa12bb34

这是revert的作用:

  

恢复提交意味着创建一个撤消所有提交的新提交   在错误提交中进行的更改。就像上面那样糟糕   提交仍然存在,但它不再影响当前的主服务器   以及任何未来的承诺。

答案 1 :(得分:0)

根据您的部分描述,您似乎不太可能使用任何“危险”选项,而您只是添加并将错误提交推送到遥控器。

假设远程存储库是“origin”,并且有问题的分支是“master”:

git log origin/master

这应该为您提供远程提交的日志。您应该看到错误的合并,然后是远程分支上的先前提交。

在开始尝试修复此问题之前,请将新分支作为保险政策标记为当前提示。如果你陷入困境,你可以轻松地返回提示提交:

git checkout -b master-before-i-tried-to-fix-this-mess

现在,在合并之前获取提交哈希,首先,执行非破坏性检出:

git checkout <hash>

其中<hash>是错误合并之前的前一次提交的哈希值。

现在查看您的目录。说服自己,这是远程分支的尖端,然后才搞砸了。

然后,返回当地分支机构:

git checkout master

现在,强制将主分支重置为良好的提交:

git reset --hard <hash>

现在,您应该在执行合并之前回到状态。现在尝试再次进行合并:

git merge whatever-you-tried-to-merge

一旦你确信自己合并了一切:

git push --force

你真的需要确保你正在推动一个好的远程分支,如果其他人已经检查了远程存储库,你需要告诉他们你做了什么。

可以将固定的遥控器作为普通提交推送,但这需要更多的工作,实际上是一个更危险的程序。你只需要拿走你的肿块,并将其用作学习经验。

如果您发现再次搞砸了,则需要删除本地主分支,然后使用保险单重新创建:

git checkout master-before-i-tried-to-fix-this-mess
git branch -D master
git checkout -b master

然后再试一次。