1

我们的团队正在使用 git 子模块,但是我们在 pull 时遇到了一些错误,这告诉我们即使我们最近更新了(并且从那以后没有远程提交/推送),我们还是落后了。这发生在两种情况下:

  1. 在我们的子模块中分离HEAD,或
  2. 使用时git commit --amend

我将尝试展示这些事情发生的场景。我的问题是,有谁知道具体错误在哪里,以及修复它们的简单方法(比我们的肮脏黑客更好)?

场景 1 - 分离式HEAD

  1. 我们发行:
    1. git clone --recursive $REPO $DIR
    2. git sfe 'git pull origin master'
    3. git submodule update --recursive- 我们实际上并没有使用这么多,因为它往往使我们处于分离HEAD状态
  2. 我们检查所有分支是否都打开master(或至少不处于分离HEAD状态)git sfe 'git branch'。如果没有,我们发出一个git sfe 'git checkout master'. (我们目前都(约 4 人)在 master 上开发,只是为了尽量减少合并和启动和运行)
  3. 如果我们处于 detached HEAD,进行更改,然后切换到master(因此我们的未暂存文件保留在工作目录中),暂存并提交这些更改,然后尝试推送,Git 说我们必须拉动,因为我们落后了。我们可以通过以下方式解决这个问题:
    • 说“拧它”,检查一个完全干净的超级模块,确保我们没有处于分离状态HEAD,然后从那里开始工作
    • 获取修订号,git checkout master然后发出 agit merge $REV并经历重新合并当前更改与似乎存在的过去更改冲突的痛苦。

场景 2 - 修改提交

  1. 这个不多。我将自己开发,发布 a git commit --amend,然后尝试推动这些更改。但是,当我这样做时,它告诉我我落后了,必须合并。当我这样做时,将所有当前更改与过去的修订重新合并,这又是一个痛苦的过程。
    • 这是因为我试图推送基于不再是的提交的东西HEAD吗?

注意git sfe是我们的别名git submodule foreach --recursive(我们有一些嵌套的子模块,只是为了自虐[或者更确切地说,我们需要能够将代码分离出来并且子子模块的放置是有意义的事实])

4

0 回答 0