【问题标题】:Undo all new commits in a branch [duplicate]撤消分支中的所有新提交[重复]
【发布时间】:2020-05-12 23:48:48
【问题描述】:

无意间我将远程分支feature1 拉入development

1. git checkout development
2. git pull origin feature1

分支developmentorigin/development 领先N 提交。 我无法将更改推送到源/开发。拉取后,我尝试运行merge --abort,但没有成功。

有没有办法特别撤销分支中的所有新更改(提交推送)?

【问题讨论】:

  • 不确定“我无法将更改推送到源/开发”是什么意思。
  • @mfnx 我没有推送权限。
  • @jjoselon 没有人推动起源/发展。您可以推送遥控器,但这不是 origin/.

标签: git git-merge


【解决方案1】:

在分支development 签出时发出以下命令:

git reset --hard origin/development

这将重置您的本地开发分支以指向与 origin/development 相同的提交(您在 pull 之前所做的提交)。

注意事项:如果您希望保留本地未提交的更改,请勿使用--hard 选项。

如果您希望保留本地开发分支上的未推送提交,则应使用开发中最新提交的提交 ID,而不是 origin/development

【讨论】:

    【解决方案2】:

    git reset 应该可以帮助您。您可以回滚分支上的提交。

    假设合并是干净的,并且您只有线性历史记录,然后从开发分支执行此操作:

    git reset --hard HEAD~N
    

    将撤消开发分支上最近的 N 次提交。请小心,因为 --hard 会将它们丢弃,如果提交没有备份到另一个分支上,它们将永远消失。但听起来您已经在功能分支上进行了 N 次提交。

    【讨论】:

    • 我已经编辑了问题,你的答案仍然有效吗?
    • 使用 reflog 比必须弄清楚要使用的 N 的值更容易。
    • @jjoselon 如果您的开发分支在原始/开发之前有 N 次提交,并且这些 N 次提交都不应该在开发分支上,那么是的,我发布的内容应该可以工作。另请参阅上面 phd 的评论。
    猜你喜欢
    • 2021-06-26
    • 2023-02-07
    • 2014-06-05
    • 2013-06-23
    • 2014-05-24
    • 2018-02-27
    • 2013-10-18
    • 2021-05-01
    • 2015-04-12
    相关资源
    最近更新 更多