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

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

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

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

我怎样才能让 Github 真正将 foo.py 中的更改合并到 bb 到 master 中? (我认为它被抛弃了,因为它之前已经完全合并了这些更改......但是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
    相关资源
    最近更新 更多