我的主 GIT 分支接缝有一些错误,因此我想重新检查、重新合并或可能将我的 dev 分支克隆到 master 分支上,这样 master 分支将是 dev 的副本。
我怎样才能做到这一点?谢谢。
如果问题只是您签出的文件与分支不匹配,请git reset
正常使用:
git reset --hard HEAD
这应该就是你所需要的。但是,如果您仍然想用 dev 覆盖 master,请继续阅读。
如果你想用你的开发分支的内容覆盖你的主分支,git reset
像这样使用:
$ git checkout master
$ git reset --hard dev
然后,如果您想将其推送到其他地方:
$ git push origin master
请注意,如果您的 dev 分支没有从您的 master 分支快进(我猜它不会,因为您说您的 master 分支中有一些搞砸的东西),您需要添加--force
标记推送以在遥控器上覆盖它:
$ git push origin master --force
但是请注意,这可能涉及重写历史的所有正常警告git rebase
- 如果其他人使用此遥控器,他们将需要处理相当于上游变基的处理。
为避免将来出现此问题,请告知您的朋友--force
几乎不需要使用。如果他们在尝试时遇到冲突git push
,他们应该git pull
首先解决冲突,然后git push
。
根据您的评论,似乎有三种可能的情况:
首先,备份所有内容。然后:
在情况 1 中,用于git reset --hard HEAD
丢弃损坏的工作副本。
在案例 2 中,添加并提交工作副本中的所有内容。
在情况 3 中,用于git reset --hard dev
丢弃索引和工作副本。或者,git reset --hard SOME_COMMIT_ID_THAT_ISN'T_BROKEN
在这三种情况下,告诉你的朋友永远不要使用--force
,除非他们真的知道他们在做什么。
此外,最好不要推送到非裸存储库(即带有工作副本的存储库)。我建议您在某个地方设置一个裸存储库,您可以从中推送和拉取,而不是直接推送到具有工作副本的存储库中。用于git init --bare
创建裸仓库。
我有没有提到备份所有内容?好的。去做吧。
好问题。我以前就想这样做,但我从来没有这样做过。我最好的猜测可能是尝试以下方法。注意我不确定这对你有多好,因为我自己没有做过。
git checkout master
git pull origin dev
git commit -a -m "reverted to dev"
这样做可能会导致冲突。