更改主分支并推送本地提交

时间:2017-10-24 10:36:05

标签: git gitlab

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

  1. 将文件添加到索引。
  2. 提交
  3. 修复冲突并标记为marged
  4. 如果需要再次提交并按
  5. 现在我们遇到了问题。对于这些新人中的一个,Git表现得非常奇怪。有时拉不会造成任何问题,有时像昨天一样,它认为他修改了很多文件,这不是真的......它看到的修改是旧版本的文件,它应该更新为新版本......他没有将它们添加到索引中并且没有提交它们,但是在Git存储库中不知何故是旧文件......

    有人决定通过在文件中添加一个空行来修复此问题,并使用正确版本的文件,因为没有别的东西不想工作。但它并不完全正确,现在是存储库中的巨大混乱。所以他创建了一个恢复分支,但每个人都在为master工作。

    如何让这个新分支成为当前的主分支?此外,我们还需要在这个新分支中包含其他人的本地提交。或者也许你可以推荐别的东西? 为什么会发生这种情况并且仅限于一个人?

1 个答案:

答案 0 :(得分:1)

  

如何让这个新分支成为当前的主分支?

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

你(只有你):

  1. 备份旧主分支(可选)

    git checkout master
    git checkout -b master-bk
    
  2. 删除本地主分支

    git branch -D master
    
  3. 将您的新分支设为主分支(本地)

    git checkout newmasterbranch
    git checkout -b master
    
  4. 强制将新主人推送到您的存储库

    git push origin master -f
    
  5. 执行上述步骤后所有团队成员

    1. 在本地创建主备份(对于旧的主分支)

      git checkout -b master-bk-teammembername
      
    2. 删除本地主分支

      git branch -D master
      
    3. 从远程

      获取新的主分支
      git fetch --all
      
    4. 结帐新主人

      git checkout master
      
    5.   

      此外,我们还需要在这个新分支中包含其他人的本地提交。

      在樱桃挑选中查看此answer

      编辑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>
      

      如果要应用更改但不提交,请添加-n标记。

      git cherry-pick -n <COMMIT-HASH>
      

      *请务必与您的团队核实结果。

      其他高级解决方案可用,例如重新定位分支迭代地选择您想要的提交,但请注意,如果有人只是拉动已定位的,修改远程分支的历史记录会变得一团糟分支而不删除旧分支。

      网上有很多教程,我特别喜欢this one

      您可以使用其他内容来显示您的提交历史记录,例如gitk,sourcetree,gitkraken

相关问题