GIT将文件从dev重新合并到master

时间:2010-12-21 00:35:27

标签: git merge clone git-clone

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

我该怎么做? THX。

3 个答案:

答案 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. 主索引包含正确的代码,工作副本已损坏。
  2. 工作副本很好,索引现在已经破了。
  3. 两者都坏了。
  4. 首先,支持一切。然后:

    在案例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"

以上述方式执行此操作可能会导致冲突。