Git 为什么重设基础和硬重置会给我不同的结果?

Git 为什么重设基础和硬重置会给我不同的结果?,git,github,rebase,git-rebase,git-reset,Git,Github,Rebase,Git Rebase,Git Reset,我已经进行了另一次回购,为其创建拉取请求。在本文所述期间,没有其他人参与回购 我的第一次提交是作为拉取请求提交给远程回购。这是可以接受的。我的第二个拉取请求有需要修复的错误,但这需要将文件恢复到以前的状态,因为问题是我在编辑器将文件更改为其他格式时破坏了格式 这似乎是我可以使用rebase实现的。然而,当我在签出主分支时使用“git rebase upstream/master”时,我被告知“当前分支的主分支是最新的”。我的分支目前比upstream提前一次提交,我对rebase的理解是,它应该

我已经进行了另一次回购,为其创建拉取请求。在本文所述期间,没有其他人参与回购

我的第一次提交是作为拉取请求提交给远程回购。这是可以接受的。我的第二个拉取请求有需要修复的错误,但这需要将文件恢复到以前的状态,因为问题是我在编辑器将文件更改为其他格式时破坏了格式

这似乎是我可以使用rebase实现的。然而,当我在签出主分支时使用“git rebase upstream/master”时,我被告知“当前分支的主分支是最新的”。我的分支目前比upstream提前一次提交,我对rebase的理解是,它应该将我的分支的头移到我正在重基的分支的最后一次提交

在查看我做错了什么的时候,我注意到“git reset--hard”应该做同样的事情。所以我做了“git重置——硬上游/主控”,这达到了预期的效果,将磁头移动到我接受的pull请求

我的问题是,既然两者都应该做相同的事情,为什么我会得到不同的结果

然而,当我在签出主分支时使用“git rebase upstream/master”时,我被告知“当前分支主分支是最新的”

这将在
上游/master
之上重播
上游/master
,这意味着没有什么可做的,因为
上游/master
提交已经是
上游/master
的一部分

通常,当您提交请购单时,您希望确保这些请购单是在最新的上游主分支上完成的,这意味着更新后的原始回购(已分叉)

这假设您的PR是在分支中完成的,而不是在
master

如果您的PR是在
主机上完成的,则:

  • 从当前的
    主机创建分支
    git分支mypr
    <代码>git推送-u源mypr
#从那个分支机构做一个新的公关
  • 将主机重置为
    origin/master
    git-fetch
    git-reset-硬主机/主机

  • 不,这不是rebase所做的。它接受您指定的提交(远程头或任何东西),并在其上重放您的本地提交。请仔细阅读git help rebase的描述部分。这里有很好的例子
    rebase
    不应该执行与
    reset--hard
    相同的操作。但是在这种情况下,我的主分支比上游/master分支早一次提交。该提交已作为PR提交,但未被接受。如果无需重新设置基础,为什么硬重置会起作用?@Quitch确切地说:您需要重新设置基础,然后强制将该分支推到您的分支:PR将被更新。@Quitch至于master,您确实可以将其重置为上游master。但问题是:我们讨论的是两个不同的分支:一个(PR)是rebase,另一个(master)是reset。
    git checkout my_PR_branch
    git fetch upstream
    git rebase upstream/master