Git子树推送失败就好像过时

时间:2017-11-30 21:02:33

标签: git git-subtree

我已经看到了一些类似的问题,但那里列出的解决方案似乎对我们没有用。

我们有一个包含许多不同子树的回购。对于其中一些,git子树推送工作正常,对于其他人,它失败了以下:

hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.

我们正在关注其中一个破碎的子树来确定问题。

在我们的主回购中,我们有一个分支(我们称之为BranchA),子树先前已从中拆分(git subtree split后跟git push拆分分支)。然后将远程BranchA重新引入:

git subtree add --prefix=/path/to/subtree SubtreeRemoteName BranchA

子树的远程存储库目前只包含一个提交(017f3783),我们提供了相同的BranchA名称。

我可以在BranchA的历史记录中看到拆分的位置为:

$ git show df968c
commit df968c95dd2cd3f2ea1f4e059dfd19b1661d275d
Merge: 6f86ff21 017f3783
Author: Me
Date:   Wed Nov 29 11:50:56 2017 -0600

    Add 'path/to/subtree' from commit '017f3783af9260c0de29a85916bc5f4776c186c2'

    git-subtree-dir: path/to/subtree
    git-subtree-mainline: 6f86ff21afbed1a0da60f4019ae20c43f28ee5db
    git-subtree-split: 017f3783af9260c0de29a85916bc5f4776c186c2

自从最初添加子树以来,各种各样的东西已经被提交到主存储库的BranchA中,我们现在正在尝试:

git subtree push --prefix=path/to/subtree SubtreeRemoteName BranchA

返回上述错误。

我们尝试过的事情:

git subtree pull --prefix/path/to/subtree SubtreeRemoteName BranchA

返回:

From https://ourgitserver/path/to/subtree/repo
 * branch              BranchA      -> FETCH_HEAD
 + 50a42087...017f3783 BranchA      -> SubtreeRemoteName/BranchA (forced update)
Already up-to-date.

我确实找到了#34;强制更新"评论可能有趣,但看到提交哈希似乎仍然排队,我不知道它是否重要。

此外,运行:

git branch --contains 017f3783

返回:

* BranchA

确认必要的提交实际上已经在BranchA中。

一个SO问题(Git subtree - subtree up-to-date but can't push)建议将子树推送拆分为单独的split / push命令,并将force标志添加到push。虽然这确实有效(在推送成功的意义上),但它也会重写现有的提交,这将破坏我们的其他回购,也将此作为子树。

如果我在拆分此分支之前立即从提交中签出新分支并运行子树的新分割(基本上重复最初完成的分割):

git subtree split --prefix=path/to/subtree -b TempBranch

正如预期的那样,创建的TempBranch会显示相同的哈希值(017f3783),然后将其合并,如前面的合并提交所示。有趣的是,如果我尝试删除TempBranch,它的行为就像它没有被合并:

$ git branch -d TempBranch
error: The branch 'TempBranch' is not fully merged.
If you are sure you want to delete it, run 'git branch -D TempBranch'.

它需要强制删除(-D标志)才能实际删除它。

如果我改为从当前的BranchA运行相同的分割,我会得到一个没有父代的提交:

$ git show bcc9f
commit bcc9f244f855d99ee1547ee309ba1606ed7a35fc
Author: Me
commit bcc9f244f855d99ee1547ee309ba1606ed7a35fc
Author: Me
Date:   Wed Nov 29 15:49:50 2017 -0600

    Commit text.

运行拆分,但将"传递给"标志:

git subtree split --prefix=path/to/subtree -b TempBranch --onto=017f3783

只需创建没有父级的相同bcc9f244提交。

有什么建议吗?

0 个答案:

没有答案