我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
我用这一行更新我的分叉回购:
git pull https://github.com/forkuser/forkedrepo.git branch
如果您不想在项目中添加另一个远程端点,请使用此选项,如其他解决方案所示。
其他回答
我想补充一下@krlmlr的答案。
最初,分叉存储库有一个名为master的分支。如果正在处理新功能或修复,通常会创建新的分支功能并进行更改。
如果您希望分叉存储库与父存储库同步,可以为pull应用程序(在功能分支中)设置一个配置文件(pull.yml),如下所示:
version: "1"
rules:
- base: feature
upstream: master
mergeMethod: merge
- base: master
upstream: parent_repo:master
mergeMethod: hardreset
这将使分叉回购的主分支与父回购保持最新。它通过合并分叉回购的主分支来保持分叉回购的特征分支的更新。这假设功能分支是包含配置文件的默认分支。
这里有两种合并方法,一种是硬重置,这有助于将分叉回购的主分支中的更改与父回购同步,另一种方法是合并。此方法用于合并在要素分支中所做的更改和在主分支中由于强制同步而做的更改。如果发生合并冲突,拉取应用程序将允许您在拉取请求期间选择下一个操作过程。
您可以在这里阅读基本和高级配置以及各种合并方法。
我目前正在这里的分叉回购中使用此配置,以确保此处请求的增强保持更新。
保持分叉存储库始终保持永久更新有两个主要方面。
1.从fork master创建分支并在那里进行更改。
因此,当您的PullRequest被接受时,您可以安全地删除分支,因为当您使用上游更新它时,您贡献的代码将保存在分叉存储库的主库中。这样,您的主机将始终处于干净状态,以便创建新的分支以进行另一个更改。
2.为fork master创建一个计划作业,以便自动进行更新。
这可以用cron完成。下面是一个示例代码,如果您在linux中执行此操作。
$ crontab -e
将此代码放在crontab文件中,以每小时执行一次作业。
0 * * * * sh ~/cron.sh
然后创建cron.sh脚本文件,并与ssh代理和/或预期的git交互,如下所示
#!/bin/sh
WORKDIR=/path/to/your/dir
REPOSITORY=<name of your repo>
MASTER="git@github.com:<username>/$REPOSITORY.git"
UPSTREAM=git@github.com:<upstream>/<name of the repo>.git
cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent` && expect ~/.ssh/agent && ssh-add -l
git clone $MASTER && cd $REPOSITORY && git checkout master
git remote add upstream $UPSTREAM && git fetch --prune upstream
if [ `git rev-list HEAD...upstream/master --count` -eq 0 ]
then
echo "all the same, do nothing"
else
echo "update exist, do rebase!"
git reset --hard upstream/master
git push origin master --force
fi
cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent -k`
检查分叉的存储库。它将不时显示此通知:
此分支与<upstream>:master相等。
这取决于存储库的大小以及如何分叉。
如果它是一个很大的存储库,您可能希望以一种特殊的方式管理它(例如删除历史记录)。基本上,您可以获取当前版本和上游版本之间的差异,提交它们,然后将它们重新提交给master。
试试看这个。它描述了如何处理大型Git存储库,以及如何使用最新的更改对其进行上游处理。
从2014年5月开始,可以直接从GitHub更新fork。截至2017年9月,这仍然有效,但这将导致肮脏的犯罪历史。
在GitHub上打开你的分叉。单击拉取请求。单击New Pull Request。默认情况下,GitHub会将原始文件与您的fork进行比较,如果您没有进行任何更改,则不应该有任何可比较的内容。如果看到该链接,请单击切换基础。否则,手动将底叉向下设置到叉上,将头叉设置到上游。现在GitHub将您的分叉与原始分叉进行比较,您应该可以看到所有最新的更改。创建拉取请求并为拉取请求分配一个可预测的名称(例如,从原始请求更新)。向下滚动到Merge pull请求,但不要单击任何内容。
现在您有三个选项,但每个选项都会导致提交历史记录不那么清晰。
默认值将创建难看的合并提交。如果您单击下拉菜单并选择“压缩并合并”,所有中间提交都将被压缩为一个。这通常是你不想要的。如果您单击Rebase并合并,所有提交都将“与”您一起进行,原始PR将链接到您的PR,GitHub将显示This branch is X commits before,Y commits behind<original fork>。
因此,是的,您可以使用GitHub web UI保持回购的上游更新,但这样做会玷污您的提交历史。而是坚持使用命令行-这很简单。
如果您使用的是Windows或Mac的GitHub,那么现在他们有一个一键更新fork的功能:
在UI中选择存储库。单击顶部的“从用户/分支更新”按钮。
推荐文章
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- 同步vs锁定
- git如何显示不存在于.gitignore中的未跟踪文件
- 在另一个目录中运行操作
- Git错误:遇到7个文件应该是指针,但不是
- GitHub克隆与OAuth访问令牌
- 移动(或“撤销”)最后一个git提交到非暂存区域
- 我可以在GitHub上对要点进行拉请求吗?
- Hg:如何做一个像git的rebase