我的项目在服务器上有一个裸仓库设置。我目前在分支0.9/develop
。我0.9/develop
与另一个开发人员正在开发的分支合并。事实证明,修复他的代码比完全消除他的更改要多得多。不幸的是,我git push origin 0.9/develop
在提交合并后已经运行了一个,并且我将这些更改拉到了我的开发和登台服务器(是的,我很愚蠢)。
我一直在经历一些关于 SO 的类似问题,但似乎没有一个能完全涵盖我的确切情况。这个特别有用:How to revert Git repository to a previous commit?
使用来自该问题的信息,我能够成功消除项目的最后一次提交。具体来说,我做了一个git reset --hard f6c84a0
,在我将其他开发人员的 n00bery 合并到我的诗歌中之前,它成功地将我的本地存储库重置为提交。
好,太棒了。现在我只需要修复裸回购。所以我尝试了git push --force origin 0.9/develop
。不幸的是,我丢失了服务器发回的特定消息,但它类似于“成功”,它表明远程 repo 已更新为提交 f6c84a0。
当我尝试 ssh 进入服务器然后进入我的暂存环境并运行 agit pull
时,响应是:
From /home/ben/web/example
+ 77d54e4...f6c84a0 0.9/develop -> origin/0.9/develop (forced update)
Already up-to-date.
但是,当我git log
从登台服务器运行 a 时,合并中的所有提交仍在0.9/develop
分支上。我尝试了几件事,比如git pull --force
,但我无法让错误的提交消失。
好的。给猫剥皮的方法不止一种。我将登台服务器擦干净,然后重新git clone --recursive --no-hardlinks example.git stage.example.com
运行并运行了必要的设置脚本,该脚本执行了一些小的服务器维护工作。
现在我无法回到我的0.9/develop branch
. 过去,我只是简单地运行git checkout 0.9/develop
,但如果我现在尝试,我会得到:
Branch 0.9/develop set up to track remote branch 0.9/develop from origin.
Switched to a new branch '0.9/develop'
等等……什么?0.9/develop
不是一个新的分支。使用来自这个问题的信息:如何在 Git 中克隆所有远程分支?我做了一个git branch -a
并得到以下结果:
* 0.9/develop
master
remotes/origin/0.8/develop
remotes/origin/0.8/master
remotes/origin/0.9/develop
remotes/origin/HEAD -> origin/master
remotes/origin/category-address
remotes/origin/jaminimaj
remotes/origin/master
remotes/origin/permissions
remotes/origin/ticket-duration
remotes/origin/timzone-support
然后我尝试git checkout origin/0.9/develop
了,但我收到以下消息:
Note: checking out 'origin/0.9/develop'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at f6c84a0... bugfix: revert email helper
好消息是登台服务器现在有正确的代码库,但我处于分离的 HEAD 状态。我意识到我可能在这里遗漏了一些非常小的东西,但这肯定会影响我的星期五晚上。如何让我的登台服务器 HEAD 指向返回的 HEAD 0.9/develop
?另外,我想在我的开发环境中做同样的事情,但我宁愿以正确的git
方式来做,而不是擦除整个服务器并重新开始。我可以这样做,还是我只需要通过从 repo 重建服务器来强制它?谢谢大家的帮助!