让我解释一下发生了什么......我们正在与一个项目的3人团队合作。但是上周有两个新人在帮助我们。因为真正的团队只有3人,所以我们没有创建分支或类似的东西。因此,每当有人需要推动时,请遵循以下情况:
现在我们遇到了问题。对于这些新人中的一个,Git表现得非常奇怪。有时拉不会造成任何问题,有时像昨天一样,它认为他修改了很多文件,这不是真的......它看到的修改是旧版本的文件,它应该更新为新版本......他没有将它们添加到索引中并且没有提交它们,但是在Git存储库中不知何故是旧文件......
有人决定通过在文件中添加一个空行来修复此问题,并使用正确版本的文件,因为没有别的东西不想工作。但它并不完全正确,现在是存储库中的巨大混乱。所以他创建了一个恢复分支,但每个人都在为master工作。
如何让这个新分支成为当前的主分支?此外,我们还需要在这个新分支中包含其他人的本地提交。或者也许你可以推荐别的东西? 为什么会发生这种情况并且仅限于一个人?
答案 0 :(得分:1)
如何让这个新分支成为当前的主分支?
此解决方案要求团队中的每个人都删除旧的本地主分支。
你(只有你):
备份旧主分支(可选)
git checkout master
git checkout -b master-bk
删除本地主分支
git branch -D master
将您的新分支设为主分支(本地)
git checkout newmasterbranch
git checkout -b master
强制将新主人推送到您的存储库
git push origin master -f
执行上述步骤后所有团队成员:
在本地创建主备份(对于旧的主分支)
git checkout -b master-bk-teammembername
删除本地主分支
git branch -D master
从远程
获取新的主分支git fetch --all
结帐新主人
git checkout master
此外,我们还需要在这个新分支中包含其他人的本地提交。
在樱桃挑选中查看此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