在协作项目中保持分叉与上游同步的标准方法是什么?
What is the standard way of keeping a fork in sync with upstream on collaborative projects?
此处为新手开源贡献者。
我在 GitLab 上分叉了 TortoiseGit repository,然后在我的电脑上克隆了它,编辑了一个文件,并提交到分支 master
。
几天过去了,我想用上游的最新更改更新我的本地工作副本,然后推送到我的远程分支并打开合并请求(当然还有更多development/testing等).
我在我的存储库中添加了一个名为 upstream
的遥控器,现在我不确定推荐的操作是什么:
git pull
从 upstream/master
到我签出的分支 master
git pull --rebase
//
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
如果上游指的是主仓库,则可以
git fetch origin
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。
此处为新手开源贡献者。
我在 GitLab 上分叉了 TortoiseGit repository,然后在我的电脑上克隆了它,编辑了一个文件,并提交到分支 master
。
几天过去了,我想用上游的最新更改更新我的本地工作副本,然后推送到我的远程分支并打开合并请求(当然还有更多development/testing等).
我在我的存储库中添加了一个名为 upstream
的遥控器,现在我不确定推荐的操作是什么:
git pull
从upstream/master
到我签出的分支master
git pull --rebase
//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
如果上游指的是主仓库,则可以
git fetch origin
git rebase origin/master
假设origin
指向主仓库
在这种情况下,变基重放当前分支(您的本地 master
分支)在您要变基 origin/master
的分支之上的提交,这是对当前 [= origin
.
例如:
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。