协作者应该推送到一个独立的分支,但是却向回购的master提交了大约60次。他现在把那支树枝弄得乱七八糟。我需要:
master分支上所做的本地更改如何在不丢失本地更新的情况下在git /源树中做到这一点?
发布于 2017-06-28 23:59:45
我不知道在源树中执行此操作的等效步骤,但是下面是如何从终端完成的。希望您可以在源树中复制这些步骤。
要完成这些任务,您将使用git reset --hard和git push -f。您需要确保远程允许非快速向前推(阻止非快速向前推的设置位于remote的. .git/config文件中,位于接收> denyNonFastforwards = true下)。只需将其暂时设置为“false”,然后再修复)
git clone <url> <fix-the-repo>
cd <fix-the-repo>
git checkout mastergit branch feature (母版和特性现在指向同一个提交-id)
git reset --hard <SHA>
git push -f origin mastergit push origin feature
cd <local-repo>
git fetch origin (您应该看到一条关于强制更新主分支的消息)git log --oneline --decorate --graph --all
git push origin master
呼!
发布于 2017-06-29 00:11:08
这是相对直接的。
发布于 2017-06-29 00:08:20
如果您可以直接登录到服务器,您可以用相对较少的小题大做就可以将其全部修复,但您必须了解Git的内部信息。
如果没有,最好的选择是在您控制的具有推送访问权限的机器上使用临时存储库(即新的git clone)或临时工作树(即git worktree add,假设您的Git至少是2.6版)。这根本不需要任何特殊的Git专业知识,尽管如果您正在使用git worktree add,您将不需要在您的master分支中工作(也就是说,如果您在您自己的分支中工作,您在这里很好)。
若要使用新的但临时的克隆,请照常运行git clone (在新目录中创建一个新的克隆)。然后chdir (cd)像往常一样进入新的克隆体。您应该在master上;如果不是,运行git checkout master。您的master将与origin/master匹配,因为这是一个新的克隆。
若要使用临时工作树,请从常规工作树的顶层运行git add worktree ../fix master。Chdir进入新的工作树,它现在在您自己的master分支上。运行git fetch origin && git reset --hard origin/master以更新master以匹配origin/master。
既然您的master已经与本应是其他分支的其他人的master同步,那么就创建他应该创建的分支:git checkout -b feature或其他什么。然后像往常一样将新分支推到服务器上。
接下来,按应有的方式设置master。在这里,您有两个选择:您可以使用git reset --hard回滚他的所有更改,只要您可以让自己、他和其他获得他的更改的人同样回滚,这是很好的。(如果您使用自己的存储库和临时工作树,则此回滚操作是自动的。)或者,您可以对主人进行新的提交,使用他应该保留的树。无论哪种方式,都必须标识要还原的提交。
要执行前者,请运行git reset --hard <commit-hash>。要执行后一个操作,运行git rm -rf . && git checkout <commit-hash> -- . && git commit (请注意这里的额外点)。前者回绕master,删除提交;后者生成一个新提交,其树与早期提交具有相同的树(这就是为什么我们首先删除所有内容,然后从早期提交中检出所有内容)。
现在,对于后一种情况,您可以像往常一样使用git push origin master。对于前一种情况(git reset),您必须使用git push --force origin master。
( --force方法的危险在于,当您执行所有这些操作时,其他正在推动master的用户可能正在进行更改;您也会丢失他们的更改。但是,既然现在情况很糟糕,你应该确保没有其他人在做这些改变。)
您现在完成了,或者大部分完成了:您可以删除克隆或临时工作树。如果您使用了一个克隆并使用了"reset master“方法,您还可能需要重置您自己的存储库的master,如果您获取了其他人的提交并将它们合并到这个克隆中的您自己的主服务器(不是临时克隆的)。如果你只是增加了一个新的承诺来纠正他的错误,你就会很好。
https://stackoverflow.com/questions/44814198
复制相似问题