【问题标题】:Undo git rebase / merge / commits to pull request撤消 git rebase / 合并 / 提交以拉取请求
【发布时间】:2021-10-20 03:51:56
【问题描述】:

我正在开发一个非常不活跃的功能分支。最近对远程master分支做了一些改动,所以我跑了git checkout master和git pull。然后,我进入我的功能分支并运行 'git rebase master' 并解决了许多合并冲突和 ':qa!'d' 要求提交消息的 vim 会话。

然后我尝试将这个 rebase'd 分支推送到 GitHub,它说我的远程分支与本地分支已过期,所以我用谷歌搜索了这个,所以说首先运行 git pull 'featurebranch',解决合并冲突再次,然后运行 ​​git push 'featurebranch'。

所以我这样做了,我现有的包含 20 次提交的拉取请求突然跃升至 150 多次提交。现在,我真的不知道如何恢复所有这些。如何撤消功能分支 PR 中的变基、合并和 150 多次提交?基本上,就好像过去的几次 git 更改从未发生过一样。

有没有办法做到这一点?

'git reset --hard feature@{24.hours.ago} 会起作用吗?那么如何更新PR呢? How to "time travel" git repository back in revisions?

更新:我运行了 git reflog,在变基之前找到了提交 ID,然后运行了 git reset --hard (ID)。现在我要在实际的功能分支中执行此操作,如何将重置的分支版本推送到我为它打开的 github PR。它会删除从合并/变基中添加的新提交吗?

【问题讨论】:

    标签: git github


    【解决方案1】:

    我不完全理解你的问题。

    如何将重置后的分支版本推送到我为其打开的 github PR?

    您不能通过命令行进行 PR。但是如果你已经创建了一个从 feature 分支到 master 分支的 PR,你可以 git push origin featrue-branch-name.

    它会删除从合并/变基中添加的新提交吗?

    不,如果你推送成功,远程分支应该等于本地分支。您来自本地分支的提交不会被删除。但是如果你使用-f,远程分支和本地分支不同的提交将被删除。

    将feat-branch变基为master的正常方法是:

    git checkout feature-branch-name
    # do some edit
    git add --all .
    git commit -m "update message"
    git rebase master
    # solve confilcts
    git add /path/to/confilcts/file
    git rebase --continue
    git push origin feature-branch-name
    # then click PR(from feat-branch to master) in github
    

    如果你推送失败,git push -f origin feature-branch-name,强制使远程分支同步到你的本地分支

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2018-07-15
      • 2014-10-01
      相关资源
      最近更新 更多