我的主GIT分支接缝有一些错误,因此我想重新检查,重新合并或可能在主分支上克隆我的dev分支,因此主分支将是dev的副本。
我该怎么做? THX。
答案 0 :(得分:6)
如果问题只是您的签出文件与分支不匹配,请正常使用git reset
:
git reset --hard HEAD
这应该就是你所需要的。但是,如果您仍想使用dev覆盖master,请继续阅读。
如果要使用dev分支的内容覆盖master分支,请使用git reset
,如下所示:
$ git checkout master
$ git reset --hard dev
然后如果你想把它推到别的地方:
$ git push origin master
请注意,如果您的开发分支没有从您的主分支快进(我猜它不会,因为您说您的主分支中有一些搞砸的内容),您需要将--force
标志添加到推送以覆盖遥控器:
$ git push origin master --force
但请注意,这可能涉及重写历史记录的所有常规警告la git rebase
- 如果其他人使用此遥控器,他们将需要处理相当于上游的rebase。
为了避免将来出现此问题,请告知您的朋友,使用--force
几乎永远不需要。如果他们在尝试git push
时遇到冲突,他们应先git pull
解决冲突,然后git push
。
答案 1 :(得分:1)
从你的评论看来,似乎有三种可能的情况:
首先,支持一切。然后:
在案例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
创建一个裸仓库。
我提到了一切吗?好。做吧。
答案 2 :(得分:0)
好问题。我想在我之前这样做,而我从来没有这样做过。我最好的猜测可能是尝试以下。 注意我不确定这对你有多好,因为我自己没有这样做。
git checkout master
git pull origin dev
git commit -a -m "reverted to dev"
以上述方式执行此操作可能会导致冲突。