我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?


当前回答

使用这些命令(在幸运的情况下)

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存储库添加为“远程”。(“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

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

如果您不想重写主分支的历史记录(例如,因为其他人可能已经克隆了它),那么应该用gitmergeupstream/master替换最后一个命令。然而,为了做出尽可能干净的进一步拉取请求,可能最好重新设置基址。


如果您已经将分支重新基于upstream/master,则可能需要强制推送,以便将其推送到GitHub上自己的分叉存储库。你可以这样做:

git push -f origin master

您只需要在重新启动后第一次使用-f即可。

截至本答复之日,GitHub在web界面中还没有(或者我应该说不再有?)这一功能。然而,你可以问support@github.com加上你的一票。

与此同时,GitHub用户bardiharborow创建了一个工具来实现这一点:https://upriver.github.io/

来源在这里:https://github.com/upriver/upriver.github.io

从github页面删除远程设备

然后应用这些命令:

1) git branch -D dev
2) git fetch upstream
3) git checkout master
4) git fetch upstream && git fetch upstream --prune && git rebase upstream/master && git push -f origin master
5) git checkout -b dev
6) git push origin dev
7) git fetch upstream && git fetch upstream --prune && git rebase upstream/dev && 8) git push -f origin dev

要查看配置,请使用以下命令:

git remote -v

我想补充一下@krlmlr的答案。

最初,分叉存储库有一个名为master的分支。如果正在处理新功能或修复,通常会创建新的分支功能并进行更改。

如果您希望分叉存储库与父存储库同步,可以为pull应用程序(在功能分支中)设置一个配置文件(pull.yml),如下所示:

version: "1"
rules:
  - base: feature
    upstream: master
    mergeMethod: merge
  - base: master
    upstream: parent_repo:master
    mergeMethod: hardreset

这将使分叉回购的主分支与父回购保持最新。它通过合并分叉回购的主分支来保持分叉回购的特征分支的更新。这假设功能分支是包含配置文件的默认分支。

这里有两种合并方法,一种是硬重置,这有助于将分叉回购的主分支中的更改与父回购同步,另一种方法是合并。此方法用于合并在要素分支中所做的更改和在主分支中由于强制同步而做的更改。如果发生合并冲突,拉取应用程序将允许您在拉取请求期间选择下一个操作过程。

您可以在这里阅读基本和高级配置以及各种合并方法。

我目前正在这里的分叉回购中使用此配置,以确保此处请求的增强保持更新。

这取决于存储库的大小以及如何分叉。

如果它是一个很大的存储库,您可能希望以一种特殊的方式管理它(例如删除历史记录)。基本上,您可以获取当前版本和上游版本之间的差异,提交它们,然后将它们重新提交给master。

试试看这个。它描述了如何处理大型Git存储库,以及如何使用最新的更改对其进行上游处理。