为什么rebase和硬重置会给我不同的结果?

时间:2016-09-26 07:37:37

标签: git github rebase git-rebase git-reset

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

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

这似乎是我可以使用rebase的东西。但是,当我使用" git rebase upstream / master"在检查了我的主分支时,我被告知"当前的分支主管是最新的。"我的分支目前是上游之前的一个提交,我对rebase的理解是它应该将我的分支上的HEAD移动到我反对的分支上的最后一次提交。

虽然reading the documentation看到我做错了什么,但我发现" git reset --hard"应该做同样的事情。所以我做了" git reset - hard upstream / master"这具有将HEAD移动到我公认的拉动请求的预期效果。

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

1 个答案:

答案 0 :(得分:0)

  

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

这会在master之上重播upstream/master,这意味着无所事事,因为upstream/master提交已经是master的一部分。

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

git checkout my_PR_branch
git fetch upstream
git rebase upstream/master

这假设你的公关是在一个分支而不是master完成的 如果你的公关是在master完成的,那么:

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