【问题标题】:Re-merge reverted changes from a branch into master on Github?在 Github 上将恢复的更改从分支重新合并到 master?
【发布时间】:2016-07-11 01:17:55
【问题描述】:

我有两个分支,bbmaster。我在 bb 上工作,做了一些更改,将它们推送到 Github,并提出了一个合并到 master 的拉取请求。然后我看到一个生产应用的问题,并认为bb的更改有问题,所以我点击了Github上的revert按钮。

原来问题不在于代码,而在于我尚未上传到服务器的bb 中的更改所需的数据文件,因此我希望将bb 中的更改合并到毕竟大师...所以,我在bb 中做了一个毫无意义的更改(添加了一些空格)以获得新的PR。但是 PR 只是针对空白,而不是针对 bb 相对于 master 的所有其他更改。我合并了 PR,但果然只应用了空白更改。

所以现在 Github 有两个版本的文件 foo.py,一个在 bb 和一个在 master,当我尝试提出拉取请求时,它告诉我“没有什么可以比较.master 是来自bb 的所有提交的最新版本。嗯?

我怎样才能让 Github 真正将 foo.py 中的更改合并到 bbmaster 中? (我认为它被抛弃了,因为它之前已经完全合并了这些更改......但是master 中的foo.py 的当前状态与bb 中的不同。)

【问题讨论】:

    标签: git github merge revert


    【解决方案1】:

    您最简单的解决方法是前往航站楼。如果您还没有签出该项目。

    git clone <url> my_project
    cd my_project
    git log (Find the id of the revert-- which is just a commit)
    git revert (commit_id)
    

    然后将您的更改推送到 bb 并为 master 创建一个拉取请求

    【讨论】:

    • 此时我无法还原还原,因为在其他分支上工作的其他人已将更改推送到我会破坏的主控。废话,我想我才意识到问题所在。问题是bb 中的更改比master 中的更改更旧。我现在唯一能想到的就是做一些非常老套的事情,比如将foo.py 更改为一个空文件并提交并推送,然后将更改放回foo.py,我会得到我想要的 PR。有没有更好的办法?
    • 从技术上讲,提交已经在 master 中。您可以将 master 合并到您的分支中,然后进行更改。但我认为您最好创建一个新分支然后再次进行更改。你可以挑选提交,但你最终会回到同一个地方。因为提交在master中。因此,要么合并 master 并进行更改,要么从 master 创建一个新分支并进行更改。
    • 您的更改将在文件的历史记录中。所以我只会创建一个新分支,与我的旧提交进行比较并获取更改。然后提交并推送。创建拉取请求,您就完成了。
    • 正确的答案确实是还原还原。重要的是要意识到git revert &lt;ID&gt; 不是 的意思是“回到&lt;ID&gt;状态”。 Revert 将给定的提交 ID 转换为补丁,然后“反向应用”补丁。因此,如果&lt;ID&gt; 中的更改是“删除文件 X 的第 17 行,更改文件 Y 的第 5 行,并在文件 Z 中添加新的第 9 行”,则还原它的意思是“将第 17 行放回 X 中,取消更改 5在 Y 中,删除 Z 中的 9”(除了这一切都是通过上下文差异和修补完成的,如果在这些行中或旁边发生了其他更改,则需要您的帮助才能合并)。
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2021-10-24
    • 1970-01-01
    • 2014-11-27
    • 2017-04-24
    • 2017-03-04
    相关资源
    最近更新 更多