我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
使用这些命令(在幸运的情况下)
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
其他回答
以下是GitHub关于同步分叉的官方文档:
同步分叉设置在同步之前,需要添加指向上游存储库的远程。您可能在最初分叉时就这样做了。提示:同步fork只更新存储库的本地副本;它不会更新GitHub上的存储库。$git远程-v#列出当前遥控器起源https://github.com/user/repo.git(提取)起源https://github.com/user/repo.git(推)$git远程添加上游https://github.com/otheruser/repo.git#设置新遥控器$git远程-v#验证新远程起源https://github.com/user/repo.git(提取)起源https://github.com/user/repo.git(推)上游https://github.com/otheruser/repo.git(提取)上游https://github.com/otheruser/repo.git(推)正在同步将存储库与上游同步需要两个步骤:首先必须从远程获取,然后必须将所需的分支合并到本地分支。正在获取从远程存储库获取将带来其分支及其各自的提交。这些存储在本地存储库中的特殊分支下。$git获取上游#抓住上游遥控器的分支远程:计数对象:75,完成。远程:压缩对象:100%(53/53),完成。远程:总共62个(增量27),重复使用44个(增量9)拆包对象:100%(62/62),完成。从…起https://github.com/otheruser/repo*[新分支]主->上游/主现在,上游的主分支存储在本地分支上游/主分支中$git分支-va#列出所有本地和远程跟踪分支*master a422352我的本地提交remotes/origin/HEAD->origin/masterremotes/origin/master a422352我的本地提交remotes/upstream/master 5fdff0f一些上游提交合并现在我们已经获取了上游存储库,我们希望将其更改合并到本地分支中。这将使该分支与上游同步,而不会丢失本地更改。$git结帐主机#查看我们当地的主分支机构切换到分支“主”$git合并上游/主#将上游的主机合并到我们自己的主机中正在更新a422352..5fdff0f快进自述文件|9-------阅读.md | 7++++++2个文件已更改,7个插入(+),9个删除(-)删除模式100644 README创建模式100644 README.md如果您的本地分支没有任何唯一的提交,git将执行“快进”:$git合并上游/主正在更新34e91da。。16c56天快进阅读.md | 5+++--1个文件已更改,3个插入(+),2个删除(-)提示:如果您想更新GitHub上的存储库,请按照此处的说明进行操作
有三种方法可以做到这一点:从web UI(选项1)、从GitHub CLI(选项2)或从命令行(选项3)。
选项1-Web UI
在GitHub上,导航到要与上游存储库同步的分叉存储库的主页面。选择“获取上游”下拉列表。
查看上游存储库中有关提交的详细信息,然后单击“获取并合并”。
选项2-GitHub CLI
要从父级更新远程分叉,请使用gh repo sync子命令并提供分叉名称作为参数。
$ gh repo sync owner/cli-fork
如果来自上游存储库的更改导致冲突,则GitHub CLI无法同步。您可以设置-force标志来覆盖目标分支。
如何安装GitHub CLIGitHub CLI手册
选项3-命令行
在将分叉与上游存储库同步之前,必须在Git中配置指向上游存储库的远程。
1打开Git Bash。
2将当前工作目录更改为本地项目。
3从上游存储库获取分支及其各自的提交。对BRANCHNAME的提交将存储在本地分支上游/BRANCHNAME中。
$ git fetch upstream
> 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/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
> * [new branch] main -> upstream/main
4查看fork的本地默认分支-在本例中,我们使用main。
$ git checkout main
> Switched to branch 'main'
5将来自上游默认分支(在本例中为upstream/main)的更改合并到本地默认分支中。这将使fork的默认分支与上游存储库同步,而不会丢失本地更改。
$ git merge upstream/main
> 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/main
> Updating 34e91da..16c56ad
> Fast-forward
> README.md | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
注意:同步一个人的分叉只会更新回购的本地副本。要更新GitHub.com上的分叉,必须推送更改。
来源:GitHub Docs-同步分叉
Android Studio现在已经学会了使用GitHub fork存储库(您甚至不必通过控制台命令添加“上游”远程存储库)。
打开菜单VCS→ Git公司
并注意最后两个弹出菜单项:
重新使用我的GitHub分叉创建拉取请求
试试看。我使用第一个来同步本地存储库。无论如何,在您单击“Rebase my GitHub fork”后,可以在Android Studio中访问父远程存储库(“上游”)的分支,您将能够轻松地使用它们进行操作。
(我使用带有“Git集成”和“GitHub”插件的Android Studio 3.0。)
实际上,可以从浏览器中上游的任何提交在fork中创建分支:
打开https://github.com/<repo>/commits/<hash>,其中repo是您的分叉,hash是提交的完整哈希,您可以在上游web界面中找到。例如,我可以打开https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990,这将linux master作为编写时间。单击“树:……”按钮。键入新分支的名称,然后按Enter键
然后,您可以将该分支提取到本地克隆,当您在提交的基础上进行编辑时,您不必将所有数据推回到GitHub。或者使用web界面更改该分支中的某些内容。
它是如何工作的(这是一个猜测,我不知道GitHub是如何做到的):forks共享对象存储,并使用命名空间来分隔用户的引用。因此,您可以通过fork访问所有提交,即使在分叉时它们还不存在。
克隆分叉存储库后,转到克隆所在的目录路径和GitBash终端中的几行。
$ cd project-name
$ git remote add upstream https://github.com/user-name/project-name.git
# Adding the upstream -> the main repo with which you wanna sync
$ git remote -v # you will see the upstream here
$ git checkout master # see if you are already on master branch
$ git fetch upstream
你很好去那里。主存储库中所有更新的更改都将被推送到您的fork存储库中。
“fetch”命令对于保持项目中的最新状态是必不可少的:只有在执行“gitfetch”时,您才会被告知同事对远程服务器所做的更改。
您仍然可以访问此处进行进一步查询
推荐文章
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- 只用GitHub动作在特定分支上运行作业
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 是否有一个链接到GitHub下载文件的最新版本的存储库?
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- Github:我能看到回购的下载数量吗?