我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
$ git remote add upstream https://github.com/....
$ git pull upstream main
$ git push
其他回答
作为对这个答案的补充,我正在寻找一种方法,从上游分支一次性更新我的克隆回购(原始)的所有远程分支。我就是这样做的。
这假设您已经配置了一个指向源存储库(源是从那里分叉的)的上游远程,并将其与git fetch upstream同步。
然后运行:
for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done
该命令的第一部分列出了上游远程回购中的所有头,并删除了后跟refs/heads/分支名称前缀的SHA-1。
然后,对于这些分支中的每一个,它将上游远程跟踪分支的本地副本(本地侧的refs/remotes/upstream/<branch>)直接推送到源上的远程分支(远程侧的refs/头/<branch>)。
这些分支同步命令中的任何一个都可能由于以下两个原因而失败:上游分支已被重写,或者您已将该分支上的提交推送到您的分叉。在第一种情况下,如果您没有向分叉上的分支提交任何内容,则可以安全地强制推送(在上面的命令中添加-f开关;即git push-f)。在另一种情况下,这是正常的,因为您的fork分支已经分叉,在提交被合并回上游之前,您不能期望sync命令工作。
如果您使用的是Windows或Mac的GitHub,那么现在他们有一个一键更新fork的功能:
在UI中选择存储库。单击顶部的“从用户/分支更新”按钮。
使用这些命令(在幸运的情况下)
git remote -v
git pull
git fetch upstream
git checkout master
git merge upstream/master --no-ff
git add .
git commit -m"Sync with upstream repository."
git push -v
这取决于存储库的大小以及如何分叉。
如果它是一个很大的存储库,您可能希望以一种特殊的方式管理它(例如删除历史记录)。基本上,您可以获取当前版本和上游版本之间的差异,提交它们,然后将它们重新提交给master。
试试看这个。它描述了如何处理大型Git存储库,以及如何使用最新的更改对其进行上游处理。
rm -rf oldrepository
git clone ...
可能有更微妙的选项,但这是我唯一有信心的方法,我的本地存储库与上游存储库相同。
推荐文章
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- 同步vs锁定
- git如何显示不存在于.gitignore中的未跟踪文件
- 在另一个目录中运行操作
- Git错误:遇到7个文件应该是指针,但不是
- GitHub克隆与OAuth访问令牌
- 移动(或“撤销”)最后一个git提交到非暂存区域
- 我可以在GitHub上对要点进行拉请求吗?
- Hg:如何做一个像git的rebase