gpt4 book ai didi

git - 在本地从 Detached HEAD 进行一系列提交后,如何更新远程分支?

转载 作者:太空狗 更新时间:2023-10-29 14:14:38 26 4
gpt4 key购买 nike

解释发生的事情的唯一合理方法是使用图表(提交按字母顺序排列)

起始状态:

C (master, HEAD, origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
|
B
|
A

然后我又回到了A,因为我走错了B和C的方向:git checkout A

C (master, origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
|
B
|
A (HEAD)

现在我做了一系列新的好的改变:

E (HEAD)
|
D
|
| C (master, origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
| |
| B
| |
|/
A

废话。忘了我让我的头分离了。好的。让我们试试这个!git branch -f master E

E (master, HEAD)
|
D
|
| C (origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
| |
| B
| |
|/
A

这就是我现在的位置。我知道,如果我运行 git pull,我将从 B 和 C 中提取糟糕的更改。我不确定如果我尝试 git push 会发生什么。

我是否必须前往所有远程服务器并执行 git revert,然后将那些新的“还原”提交 merge 回此处?这是解决问题的方法吗?有额外的与 merge 相关的提交困惑是可以的,但我希望有一种方法可以摆脱这种情况而不会留下一团糟。

理想情况下,我希望保留 B 和 C 的历史记录,以备不时之需。我想我需要创建一个分支来正确地做到这一点,但目前这些更改还不够重要,甚至不足以保证为它们配置(并为其命名)一个分支所需的努力。

我做了一些搜索,发现 git revert -m-something 可能是合适的,但我不确定如何应用它(即,我不确定如何确定 merge 时 B 和 C 被丢弃)。如您所见,我有很多 Remote ,并且更喜欢我可以安全轻松地应用于所有 Remote 的命令(或者更棒的是,也许我可以列出所有 Remote 来运行它)。

更新:

我现在挖了一个稍微深一点的坑:

我在所有 Remote 上运行了 git push -f

所以,一个新用户会加入这个:

E (master, HEAD, origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
|
D
|
A

但是我忘记了我是如何在 ec2 上设置东西的,服务器的裸仓库有一个接收后 Hook ,它 cd 到本地常规仓库,并从那里运行 git pull。所以我确实有一个虚拟用户,他一直在 pull 所有该死的分支。

对于这个 repo,它现在看起来像这样,因为这个用户只有一个 Remote ,origin,它与我 macbook 中的 ec2 是同一个 Remote (所有其他图表):

E (origin/master, origin/HEAD)
|
D
|
| C (HEAD, master)
| |
| B
| |
|/
A

在这一点上我想,好吧,毕竟我会去保存 B 和 C(稍后将它们作为分支推送到远程,它应该可以安全地传播):

E (origin/master, origin/HEAD)
|
D
|
| C (HEAD, saving-B-C, master)
| |
| B
| |
|/
A

但这就是我卡住的地方:

$ git branch -f master E
fatal: Cannot force update the current branch.

帮助!

最佳答案

这将解决 git push -fgit reset --hard origin/master 不是一个选项的情况(即问题中更新之前的问题).

创建一个指向提交 C 的分支:

git checkout -b temp origin/master

然后按照说明操作here还原 B 和 C。

所以现在你的历史看起来像这样:

E (master)
|
D (BC)' (temp, HEAD)
| |
| C (origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
| |
| B
| |
|/
A

现在您想要移动提交 DE 以便它们在还原之后。有几种方法可以做到这一点,一种可能是:

git checkout master
git rebase temp
git branch -d temp

现在你的历史看起来像这样:

E (master, HEAD)
|
D
|
(BC)'
|
C (origin/master, origin/HEAD, ec2/master, devserver/master, devserver/HEAD)
|
B
|
A

可以安全地推送到您的所有 Remote 。

关于git - 在本地从 Detached HEAD 进行一系列提交后,如何更新远程分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com