为什么 rebase 和 hard reset 给我不同的结果?

Why did rebase and hard reset give me different results?

我已经 fork 了另一个 repo 来为它创建 pull requests。在此描述的期间内,没有其他人为该回购做出贡献。

我的第一个提交是作为拉取请求提交给远程仓库的。这是被接受的。我的第二个拉取请求有需要修复的错误,但这需要将文件恢复到以前的状态,因为问题是我破坏了格式,因为我的编辑器将它们更改为不同的格式。

这似乎是我可以使用变基的东西。但是,当我在检查主分支时使用 "git rebase upstream/master" 时,我被告知 "Current branch master is up to date." 我的分支目前比上游提前提交一次,我对 rebase 的理解是它应该将我的分支上的 HEAD 移动到我要重新定位的分支上的最后一次提交。

虽然 reading the documentation 想看看我做错了什么,但我注意到 "git reset --hard " 应该做同样的事情。所以我做了 "git reset --hard upstream/master" 并且这具有将 HEAD 移动到我接受的拉取请求的预期效果。

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

However, when I use "git rebase upstream/master" while having my master branch checked out I am told "Current branch master is up to date."

那会在 upstream/master 之上重播 master,这意味着没有什么可做的,因为 upstream/master 提交已经是 master.[=24 的一部分=]

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

git checkout my_PR_branch
git fetch upstream
git rebase upstream/master

这假设您的 PR 是在分支而不是 master 中完成的。
如果您的 PR 是在 master 完成的,那么:

  • 从当前 master 创建一个分支:git branch myprgit push -u origin mypr; # 从该分支创建一个新的 PR。
  • 将您的主人重置为 origin/mastergit fetchgit reset --hard origin/master