使用git更新共享的分支存储库

用户名

考虑存储库A是通过Gerrit管理的github存储库。我克隆了存储库A,并从存储库A的主分支开始创建了一个新分支。我将此新分支推送到了新的gitlab存储库B。我是存储库B的管理员,并与其他开发人员共享了该库。开发人员无法推动该分支,但是我可以合并他们的拉取请求。我在存储库B的主分支上合并了一些请求请求。因此,存储库B具有存储库A的初始提交和该请求的新提交:B在A提交(ba)之上提交。

然后,我想用存储库A的新提交更新存储库B。将这些提交称为a +。

我看到两个选择:

  1. 如果我在B上合并A,则结果为:a + b a。
  2. 如果我将B基于A +,则结果为:b a + a。

选项1:开发提交与外部提交混合在一起。难以调试和突出差异。

选项2:我必须在远程B上强制进行更改。如果我没有记错的话,其后果可能是:1.如果开发人员拉了B并且对B的本地主节点有提交,则他们将丢失其本地更改; 2.在强制更新分支机构B之后,开发人员在为其本地分支机构改组基准时可能会遇到大麻烦。

我应该如何避免出现任何问题?

如果我正确理解,您将拥有一个看起来像这样的(本地)存储库:

            A/master
* -- * -- * -- a
                \
                 * -- * -- b
                       B/mybranch

现在,A已更新,因此如下所示:

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \
                 * -- * -- b
                       B/mybranch

请注意,您有两个不在一条直线上的分支分支。所以说,你会得到a+ b a当您合并AB是不正确的。您确实得到了合并,但是保留了历史记录:

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \               \
                 * -- * -- b --- M
                            B/mybranch

正如你所看到的,你仍然有在提交来自的信息:之间的那些a,并a+从一个分支出来,并且之间的其他的ab来自另一个。M结合了那些tro分支。通常,正是解决此问题的正确方法。

就像您注意到的那样,这样做比重定基础的好处在于,提交保持原样。与任何一个存储库进行交互的所有用户都可以简单地将这些更改拉进来,而不会出现任何问题。如果您重新调整了所有提交的基础,则他们将必须手动修复该问题(可能是他们甚至都没有意识到这一点,因此他们只会拉出并实际上使用重复的提交创建更混乱的历史记录)。

因此,合并绝对是更好的选择。是的,历史看起来不会像一条直线那样完美,但是它可以正确地传达出发生的事情:存在一条独立的开发线,然后通过上游存储库中的更改对其进行了更新A此信息可能很有用,因此将它们保留在其中很有意义。特别是如果您有用户与这两个遥控器交互,则他们肯定会选择使其存储库与这两个遥控器兼容。

如果您不希望历史记录看起来像这样,并且不关心与的兼容性A,则还可以将所有更改压缩A到您的B

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \
                 * -- * -- b -- [A]
                            B/mybranch

在这里,[A]是一个压扁提交包含所有的变化a,并a+在一个单一的提交。您可以通过压缩所有提交的基础A的基准来获得此结果B在这种情况下,您应该在提交消息中明确说明这些更改来自何处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Git存储库中针对master更新过时的分支

如何更新从git本地存储库中获取的分支?

Git分支作为存储库

Git-远程分支分支的存储库

Git,从本地分支(我的电脑)更新远程分支(bitbucket存储库)

使用Apple脚本更新git存储库

在Git中共享存储库时必须使用“ init --bare”

SVN 到 GIT - 多分支存储库

git:从特定分支(bitbucket)镜像存储库

跨存储库分支合并git

如何删除我从共享存储库创建的远程分支?

共享Git存储库中的.editorconfig

git中的裸共享存储库的概念

Git 扩展 - 与用户共享存储库

在共享 git 存储库中更新 node_modules 的正确方法

如何使用 git-bash 更新 GitHub 存储库?

使用大小写更改的文件更新git存储库

SierraOS 更新后无法使用 ssh git 存储库

Composer创建项目:使用分支的存储库

在默认情况下使用squash的存储库中发现合并的git分支?

如何使用Azure DevOps REST Api从Git存储库下载分支中的文件?

缺少分支使用git-svn clone克隆非标准svn存储库

如何使用默认分支名称(而不是“ master”)创建Git存储库?

克隆远程git存储库以供本地使用,而不会干扰远程分支

git - 尽管没有使用“--single-branch”克隆存储库,但从特定分支获取

将 git-svn 分支与 git 存储库同步

队友无法使用 Git 将提交推送到共享的 Bitbucket 存储库

使用git-tfs在2个TFSVC存储库之间共享代码

如何在GitHub上更新或同步分支的存储库?