Git 更改主分支并将其推送到本地提交

Git 更改主分支并将其推送到本地提交,git,gitlab,Git,Gitlab,让我解释一下发生了什么。。。我们正在一个项目上与一个由3人组成的小组合作。但上周有两个新人在帮助我们。因为真正的团队只有3个人,所以我们没有创建分支或类似的东西。因此,每当有人需要推送时,都会出现以下情况: 将文件添加到索引 承诺 拉 修复冲突并将其标记为marged 如果需要,请再次提交并推送 现在我们有个问题。对于其中一个新人来说,Git的行为非常奇怪。有时pull不会产生任何问题,有时就像昨天一样,它认为他修改了很多文件,这是不正确的。。。修改,它看到的是旧版本的文件,拉应该更新到新版本。

让我解释一下发生了什么。。。我们正在一个项目上与一个由3人组成的小组合作。但上周有两个新人在帮助我们。因为真正的团队只有3个人,所以我们没有创建分支或类似的东西。因此,每当有人需要推送时,都会出现以下情况:

  • 将文件添加到索引
  • 承诺
  • 修复冲突并将其标记为marged
  • 如果需要,请再次提交并推送
  • 现在我们有个问题。对于其中一个新人来说,Git的行为非常奇怪。有时pull不会产生任何问题,有时就像昨天一样,它认为他修改了很多文件,这是不正确的。。。修改,它看到的是旧版本的文件,拉应该更新到新版本。。。他并没有将它们添加到索引中,也并没有提交它们,但不知何故,Git存储库中有一些旧文件

    有人决定通过在文件中添加一个空行来修复此问题,并提供正确版本的文件,因为其他任何东西都不想工作。但这并不是完全正确的,而且现在存储库上乱七八糟。所以他创建了一个恢复分支,但每个人都在使用master

    如何使此新分支成为当前主分支?此外,我们还需要在这个新的分支中包含其他人的本地承诺。或者你可以推荐其他东西? 为什么这只发生在一个人身上

    如何使此新分支成为当前主分支

    此解决方案要求团队中的每个人都删除其旧的本地主分支。

    你(而且只有你):

  • 备份旧主分支(可选)

  • 删除您的本地主分支

    git branch -D master
    
    git checkout -b master-bk-teammembername
    
    git branch -D master
    
  • 使您的新分支成为主分支(本地)

  • 强制将新主机推送到存储库

    git push origin master -f
    
  • 完成前面的步骤后,所有团队成员都必须:

  • 在本地创建主备份(用于旧的主分支)

  • 删除本地主分支

    git branch -D master
    
    git checkout -b master-bk-teammembername
    
    git branch -D master
    
  • 从远程获取新的主分支

    git fetch --all
    
  • 签出到新主控

    git checkout master
    
  • 此外,我们还需要在这个新的分支中包含其他人的本地承诺

    在cherry pick上查看此项

    编辑1: 基本上,您可以查看主备份,然后列出提交:

    git checkout master # make sure you are on the new master branch
    git log master-bk
    git log master-bk --stat # to show stats on files changed
    git log master-bk -p # to show actual changes
    
    然后使用所需提交的散列,并使用cherry-pick将它们应用于主分支

    git cherry-pick <COMMIT-HASH>
    
    *确保与您的团队一起检查结果

    其他高级解决方案也可用,例如,对分支进行重定基址以迭代方式选择所需的提交,但请注意,如果有人只拉重定基址的分支而不删除旧分支,则修改远程分支的历史记录可能会变得一团糟

    网上有很多这方面的教程,我特别喜欢


    您还可以使用其他工具来可视化提交历史记录,如sourcetree、gitkraken

    Ok,但是让新分支成为git存储库上的主分支怎么样?更重要的是,为什么会发生这种情况?为什么只有一个人造成了这个问题?因为这是第二次,但第一次我们恢复了推送,因为他是当时唯一做了一些更改的人。我描述了您和您的团队成员需要执行的步骤,以使您的
    newmasterbranch
    成为新的主分支,步骤4将推送将在远程服务器上重播主分支。我的客人是,当他做出改变时,这个人真的远远落后于历史。更频繁地拉取更改可能会避免这种混淆,而且合并提交可能会混淆,特别是在冲突解决方面。也许是您的团队开始使用分支的时候了?互联网上有很多很好的教程,在我开始使用git时对我帮助很大。是的,谢谢你描述这个,但我要求提供这个,因为这只是我的想法。也许我们有更好的办法?关于分支,也许我们应该开始使用它们,因为团队越来越大了。