37

我把我的 git repo 弄乱了一点。我在一个单独的分支中开发了一个功能。完成工作后,我切换到master合并它,但是我的伙伴推送了一些与我冲突的文件。在合并、冲突和推送新更改之后,我看到我也提交了我的合作伙伴的旧更改。

现在我想重做这个提交/合并。我试过 git reset --soft HEAD^了,但是当我想推送时,我收到了这个错误消息Merge the remote changes before pushing again

谁能帮我?

4

4 回答 4

55

您的功能分支仍将指向您的工作。您不会丢失这些更改。

正如 plaes 所说,您可以使用

git reset --hard HEAD^

如果你想从你的分支中获取一些特定的文件而不合并,你可以查看它们:

git checkout yourbranch -- file1 file2 etc

如果您想从合并之前从 master 获得一些文件,您还可以查看这些文件:

git checkout master^ -- file3 file4 etc

这并不理想,但有时却是需要的。合并/可能/意味着您拒绝合并中任一方的某些更改。获得适当合并的最佳方法是:

git merge --no-commit yourbranch

从 master 开始,然后从上面运行 git checkout 命令,最后提交:

git add . -A
git commit

当你现在推送这个分支时,你需要添加force选项

git push --force

或者

git push -f

希望这可以帮助。

于 2011-04-11T18:43:59.403 回答
15

呵呵,你几乎想通了:

git reset --hard HEAD^
于 2011-04-11T15:04:53.637 回答
10

这里的问题是您想要撤消已经推送到中央存储库的更改。如果您一开始没有推送它们,那么 git reset --hard/--soft/--mixed HEAD^ 就可以了。

因此,当您重置 HEAD 时,当您尝试推送到原点并更新不是您的 HEAD 祖先的远程 ref 时,git 会抱怨。动武:

git push --force origin master
于 2011-05-01T13:25:21.690 回答
0

改用 git reset --hard origin/master ,这将执行硬重置以及删除合并。取自链接撤消尚未推送的 Git 合并

于 2021-08-17T09:29:16.153 回答