如何使用上游的最新更改更新我的分支

How to update my branch with the latest changes from upstream

这个问题听起来可能微不足道,但我真的不知道该怎么做...我正在做一个开源项目,源代码在 Github,所以我 fork该回购协议添加了一个 "remote upstream" 指向原始回购协议,还在我的分叉回购协议中创建了一个分支并进行了一些更改。它看起来像这样:

$git remote -v
origin    https://github.com/my_github_account/project_name (fetch)
origin    https://github.com/my_github_account/project_name (push)
upstream  https://github.com/project_name/repo_name (fetch)
upstream  https://github.com/project_name/repo_name (push)

$git branch
  master
* test_branch

在我的"test_branch"做了一些改动之后,上游也有一些新的改动,所以我想从上游获取最新的改动,合并到我的test_branch看看是否一切正常。我试过了:

git pull upstream master

可以很好地用于此目的,但它也创建了一个 "new commit",因为如果我经常拉取上游更改,提交消息也会在我向项目创建拉取请求时显示方式,会有很多

Merge branch 'master' of https://github.com/project_name/repo_name into test_branch

消息显示,这对其他人来说有点混乱,我也没有看到其他人的拉取请求包含此类消息......(或者也许有某种方法可以摆脱这些消息?)

我也用谷歌搜索了一下:

git pull --rebase upstream master

然后做:

git push origin test_branch

但后来我遇到了一些错误,比如:

 ! [rejected]        test_branch -> test_branch (non-fast-forward)
error: failed to push some refs to 'https://github.com/my_github_account/project_name'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

嗯...我不太清楚这意味着什么...也许我做的不正确...那么从上游获取最新更改的通常过程是什么, integrate/merge 他们进入我的分支?

提前致谢!

第二种方法是正确的(在更新的 master 之上重播您的 test_branch)。

但它也会产生预期的副作用,即重写您的 test_branch 的历史记录,您必须强行将其推送到您的叉子

git push --force origin test_branch

因为它是你的分支,没有其他人在 origin/test_branch 上工作,没关系,即使你正在进行 PR,Pull Request 也会检测到强制推送并相应地更新自己。