3

我的主 GIT 分支接缝有一些错误,因此我想重新检查、重新合并或可能将我的 dev 分支克隆到 master 分支上,这样 master 分支将是 dev 的副本。

我怎样才能做到这一点?谢谢。

4

3 回答 3

6

如果问题只是您签出的文件与分支不匹配,请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

于 2010-12-21T00:59:51.757 回答
1

根据您的评论,似乎有三种可能的情况:

  1. 主索引包含正确的代码并且工作副本已损坏。
  2. 工作副本很好,索引现在已损坏。
  3. 两个都坏了。

首先,备份所有内容。然后:

在情况 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创建裸仓库。

我有没有提到备份所有内容?好的。去做吧。

于 2010-12-21T01:05:04.257 回答
0

好问题。我以前就想这样做,但我从来没有这样做过。我最好的猜测可能是尝试以下方法。注意我不确定这对你有多好,因为我自己没有做过。

git checkout master

git pull origin dev

git commit -a -m "reverted to dev"

这样做可能会导致冲突。

于 2010-12-21T00:44:21.007 回答