我正在处理一些代码,我匆匆忙忙地搞砸了,因为我不得不 git -reset 到以前的提交。现在我已经让它工作正常了,做 git push 说我当前的分支在远程分支后面。我担心通过执行 git pull 并将更改与远程分支合并,我的代码将再次回到错误版本。有没有办法让我完全拒绝远程分支的更改而只保留新分支?(我可以回去将更改推送到远程仓库)
非常感谢
我正在处理一些代码,我匆匆忙忙地搞砸了,因为我不得不 git -reset 到以前的提交。现在我已经让它工作正常了,做 git push 说我当前的分支在远程分支后面。我担心通过执行 git pull 并将更改与远程分支合并,我的代码将再次回到错误版本。有没有办法让我完全拒绝远程分支的更改而只保留新分支?(我可以回去将更改推送到远程仓库)
非常感谢
如果
git push -f origin <branch>
你可以做一个git push --force origin branchname
,但如果你的分支已经共享,那可能不是最好的解决方案。
git reset --hard
下一次,您应该恢复您关心的特定提交,而不是仅仅执行并更改您的历史记录 - 或者您应该应用一个撤消您想要做的事情的提交。
幸运的是,git 很疯狂,即使你现在拥有的也可以让你解决这个问题。
要做到这一点,看起来像这样(从您最终关心推送的分支开始 - 让我们称之为master
):
git branch good_tree # save a branch with your recent commits
git reset --hard last_good # reset working tree to fix pushed problem
git fetch --all # update local repo with remote changes
git reset origin/master # move pointer to where remote repo's master is
# without changing working tree from last_good
git add; git commit; git push # commit fixed stuff
git checkout good_tree # rebase your changes from last_good
git rebase master # tack good_tree onto master from undone changes
git checkout master # go back to master
git merge good_tree # now you are back to where you want to be
git push # and you can push
... ish - 你可能有冲突。