Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何签出旧提交并将其推送到当前分支?_Git_Gitlab - Fatal编程技术网

Git 如何签出旧提交并将其推送到当前分支?

Git 如何签出旧提交并将其推送到当前分支?,git,gitlab,Git,Gitlab,我的分支上有一些不正确的提交/推送,然后我想恢复到旧的正确的提交并推送到当前分支 我有一个问题: git log new: xxxxxxx ... old: ac758a3 git checkout ac758a3 git commit -m 'revert to old branch (ac758a3) to push it on current branch' 输出: [编辑] 示意图: A(我想要的正确提交)---B(不正确的提交)---C(不正确的提交)

我的分支上有一些不正确的
提交/推送
,然后我想恢复到旧的正确的提交并推送到当前分支

我有一个问题:

git log
    new: xxxxxxx
    ...
    old: ac758a3

git checkout ac758a3
git commit -m 'revert to old branch (ac758a3) to push it on current branch'
输出:


[编辑]

示意图:
  • A(我想要的正确提交)---B(不正确的提交)---C(不正确的提交) 提交)
因此,我希望有以下流程:
  • A--B--C--A
我希望恢复到(旧提交)并将其推送到当前分支(同一分支)

什么是快速解决方案?


提前谢谢。

git reset--hard
是你亲爱的朋友

遵循以下步骤:

  • 在当前分支上运行命令:
    git log
  • 从要返回的日志中复制正确的提交id
  • 运行命令:
    git reset--hard
  • 将分支推送到远程:
    git推送原点-f
  • 注意:您将无法正常推送它,您必须强制推送它,因为我们已更改该分支的历史记录,并且与remote不同步。

    git reset--hard
    是您亲爱的朋友

    遵循以下步骤:

  • 在当前分支上运行命令:
    git log
  • 从要返回的日志中复制正确的提交id
  • 运行命令:
    git reset--hard
  • 将分支推送到远程:
    git推送原点-f

  • 注意:您将无法正常推送它,您必须强制推送它,因为我们已经更改了该分支的历史记录,并且与remote不同步。

    如果您已经推送了提交,而人们已经拉送了提交,最好的解决方案是添加一个新的提交,有效地撤消以前的提交。那么一切都正常了

    您可以使用git revert撤消一系列提交

    %git revert --no-edit  SHA1..SHA2
    

    这将按相反顺序应用修补程序并撤消更改。有关更多信息,请参阅git revert文档。

    如果您已经推送了提交,并且人们已经拉送了提交,那么最好的解决方案是添加一个新的提交,它可以有效地撤消以前的提交。那么一切都正常了

    您可以使用git revert撤消一系列提交

    %git revert --no-edit  SHA1..SHA2
    

    这将按相反顺序应用修补程序并撤消更改。有关更多信息,请参阅git revert文档。

    这将起作用,但将删除旧提交到当前提交的所有提交。它还将更改分支的历史记录,以便其他已拉入分支的人将遇到合并冲突,并将再次向您发回代码。这将起作用,但将删除从旧提交到当前提交的所有提交。它还将改变分支的历史记录,以便其他已经拉它的人将遇到合并冲突,并将再次将代码发送回您。请确切解释最终结果应该是什么样子。是否要删除提交?是否要还原它们?“你想假装它们从未发生过,但把它们留在里面吗?”拉塞夫·格斯·瑟卡尔森我把这个问题编辑成示意图。有不止一种方法。另请参见和(请使用
    git read tree
    注意答案)。@torek我的问题不是这些,我对回滚或恢复到旧提交没有任何问题。我的问题是,在恢复到旧提交后,我应该如何将其推送到当前分支上,而不是最后一次提交。这两个方面都向您展示了如何进行恢复,然后,
    git push
    完成了恢复。请确切解释最终结果应该是什么样子。是否要删除提交?是否要还原它们?“你想假装它们从未发生过,但把它们留在里面吗?”拉塞夫·格斯·瑟卡尔森我把这个问题编辑成示意图。有不止一种方法。另请参见和(请使用
    git read tree
    注意答案)。@torek我的问题不是这些,我对回滚或恢复到旧提交没有任何问题。我的问题是,在恢复到旧提交之后,我应该如何将其推送到当前分支上,而不是最后一次提交。这两个方面都向您展示了如何进行恢复,然后,
    git push
    就完成了。