0

我正在处理一些代码,我匆匆忙忙地搞砸了,因为我不得不 git -reset 到以前的提交。现在我已经让它工作正常了,做 git push 说我当前的分支在远程分支后面。我担心通过执行 git pull 并将更改与远程分支合并,我的代码将再次回到错误版本。有没有办法让我完全拒绝远程分支的更改而只保留新分支?(我可以回去将更改推送到远程仓库)

非常感谢

4

2 回答 2

3

如果

  • 没有其他人依赖于您发布的代码;重写历史是卑鄙的,而且
  • 您的本地分支正是您希望远程分支成为的样子,并且
  • 在此期间,没有其他人推动任何改变。

git push -f origin <branch>

于 2013-05-22T23:59:41.277 回答
2

你可以做一个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 - 你可能有冲突。

于 2013-05-23T00:11:02.623 回答