在协作项目中保持分叉与上游同步的标准方法是什么?

What is the standard way of keeping a fork in sync with upstream on collaborative projects?

此处为新手开源贡献者。

我在 GitLab 上分叉了 TortoiseGit repository,然后在我的电脑上克隆了它,编辑了一个文件,并提交到分支 master

几天过去了,我想用上游的最新更改更新我的本地工作副本,然后推送到我的远程分支并打开合并请求(当然还有更多development/testing等).

我在我的存储库中添加了一个名为 upstream 的遥控器,现在我不确定推荐的操作是什么:

  1. git pullupstream/master 到我签出的分支 master
  2. git pull --rebase //
  3. git fetch 后跟 git rebase.

这些是我在研究过程中发现的方法。不幸的是,我找不到对每一个的全面评论,也找不到关于在 GitHub、GitLab 甚至像 Linux 内核的项目中工作时哪一个是典型实践的建议。

我尝试了方法 1 和 3。方法 1 (pull) 生成一个合并提交(--ff-only 是不可能的)并且我的历史在某种程度上被污染了。它还会产生冲突。方法 3 (rebase) 两者都不做,但我不确定 rebase 在提交被推送到远程后的行为方式,所以我担心它可能会导致未来出现问题。

所以这是我的问题。
谢谢。

I forked the TortoiseGit repository on GitLab, then cloned it on my computer, edited one file, and committed to branch master A few days have passed and I want to update my local working copy with the latest changes from upstream

如果上游指的是主仓库,则可以

  1. git fetch origin
  2. git rebase origin/master

假设origin指向主仓库

在这种情况下,变基重放当前分支(您的本地 master 分支)在您要变基 origin/master 的分支之上的提交,这是对当前 [= origin.

的 13=] 分支

例如:

master 提交之前的分支:

  • c
  • b
  • 一个

master 提交后的分支:

  • xxx <- 你的提交
  • c
  • b
  • 一个

几天后,TortoiseGit git 提交到 origin/master 现在看起来像这样。

  • 3
  • 2
  • 1
  • c
  • b
  • 一个

您通过在 origin/master 之上获取和变基来同步更改。您的本地 master 分支现在将如下所示:

  • xxx <- 你的提交
  • 3
  • 2
  • 1
  • c
  • b
  • 一个

I added a remote called upstream to my repo and now I'm not sure what would be the recommended action

然后你可以简单地git push upstream master更新你的叉子。

这里是 TortoiseGit 团队成员。

I added a remote called upstream to my repo and now I'm not sure what would be the recommended action:
1. git pull from upstream/master to my checked-out branch master
2. git pull --rebase //
3. git fetch followed by git rebase.

不同的团队使用不同的工作流程。
参见 Pro Git (v2) - 5.1 Distributed Git - Distributed Workflows

在 TortoiseGit 团队中,我们更喜欢保持历史简单,贡献者通常有责任在变基时解决冲突。

所以,大多数时候,我们使用“git fetch 然后是 git rebase”,尤其是在贡献时。然后,如您所说,创建 pull/merge 请求(通过使用 git push),或更新 pull/merge 请求(通过使用 git push with force) 在 GitHub/GitLab.

有关其他详细信息,请参阅 How Can I Contribute? and HowToContribute.txt