我如何更新GitHub分叉库?
我最近分了一个项目并应用了几个修补程序。 然后我创建了一个接受请求。
几天后,另一个贡献者又做了一次改变。 所以我的叉子不包含这种变化。
我怎样才能将这种变化带入我的叉子? 当我进一步做出贡献时,是否需要删除并重新创建我的分支? 还是有更新按钮?
在分叉存储库的本地克隆中,可以将原始GitHub存储库添加为“远程”。 (“Remotes”就像存储库的URL的昵称 - 例如, origin
是一个)。然后,您可以从该上游存储库中获取所有分支,并重新分配工作以继续使用上游版本。 就可能看起来像这样的命令而言:
# Add the remote, call it "upstream":
git remote add upstream https://github.com/whoever/whatever.git
# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:
git fetch upstream
# Make sure that you're on your master branch:
git checkout master
# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master
如果你不想重写主分支的历史记录(例如,因为其他人可能已经克隆了它),那么你应该用git merge upstream/master
替换上一个命令。 但是,为了进一步提出尽可能干净的请求,最好重新绑定。
如果您已将分支重新分配到upstream/master
,则可能需要强制推送以将其推送到GitHub上的自有分支存储库。 你可以这样做:
git push -f origin master
您只需在重新组装之后首次使用-f
。
从2014年5月开始,可以直接从GitHub更新分支。 这仍然适用于2017年9月, 但它会导致肮脏的承诺历史。
Update from original
)。 现在你有三个选项,但每个选项都会导致一个不太干净的提交历史记录。
This branch is X commits ahead, Y commits behind <original fork>
。 所以是的,你可以使用GitHub网络用户界面让你的repo更新上游,但这样做会玷污你的提交历史。 坚持使用命令行 - 这很简单。
这里是GitHub关于同步分叉的官方文档:
同步叉子
安装程序
在可以同步之前,您需要添加指向上游存储库的远程设备。 当你最初分叉时,你可能已经这样做了。
提示:同步叉只会更新存储库的本地副本; 它不会在GitHub上更新您的存储库。
$ git remote -v
# List the current remotes
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote
$ git remote -v
# Verify new remote
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
upstream https://github.com/otheruser/repo.git (fetch)
upstream https://github.com/otheruser/repo.git (push)
同步
有两个步骤需要将存储库与上游同步:首先,您必须从远程获取,然后您必须将所需的分支合并到本地分支。
取
从远程存储库获取将引入其分支机构及其各自的提交。 这些存储在特殊分支下的本地存储库中。
$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
* [new branch] master -> upstream/master
我们现在将上游的主分支存储在本地分支中,上游/主分支
$ git branch -va
# List all local and remote-tracking branches
* master a422352 My local commit
remotes/origin/HEAD -> origin/master
remotes/origin/master a422352 My local commit
remotes/upstream/master 5fdff0f Some upstream commit
合并
现在我们已经获取了上游存储库,我们想要将其更改合并到本地分支中。 这将使该分支与上游同步,而不会丢失本地更改。
$ git checkout master
# Check out our local master branch
Switched to branch 'master'
$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
README | 9 -------
README.md | 7 ++++++
2 files changed, 7 insertions(+), 9 deletions(-)
delete mode 100644 README
create mode 100644 README.md
如果你的本地分支没有任何独特的提交,git会改为执行“快进”:
$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
提示:如果要在GitHub上更新存储库,请按照此处的说明进行操作
链接地址: http://www.djcxy.com/p/381.html