我的错误是在本地仓库上覆盖了已经在远程仓库中的提交。我有三个提交还没有推送到远程仓库。有没有办法保留这些更改,这样当我执行git pull时,我可以解析提交并回到正常状态?
我需要逐步指导命令,因为我担心做错事情。
我需要逐步指导命令,因为我担心做错事情。
这里有几个选项:
因此,如果您当前的历史记录如下:
git pull
是git fetch
后跟git merge FETCH_HEAD
的速记法
12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
git pull
后,你的历史记录会看起来像这样:98aabbcc76 merge from server
12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
所以,如果你想回到拉取之前的状态,可以像这样重置到你最初的提交之一:
git reset --hard 12bcdef345
git log --oneline
,以防你重置太多或改变了想法。reflog
运行git log --oneline
,你会得到当前分支的提交历史。查看最近检出的提交记录也有一个类似的命令:git reflog --oneline
。git reflog
找到你已经检出的提交记录,然后通过运行以下命令从旧的提交中重新创建分支:git checkout -b <branch-name> <commit-hash>
git branch <backup-branch-name> <HEAD-or-branch-to-backup>
git pull
。git reset --hard <backup-branch-name>
注意
如果您的本地更改尚未提交,则此方法可行。我不确定您是否已经提交了您的本地更改。在运行命令之前,请留下一条评论回答我的问题。
如果我理解正确,您需要从远程拉取数据,同时保留当前的本地更改。如果是这种情况,以下是一个简单的解决方案。运行以下命令:
git stash
git pull
git stash apply
git stash apply
时可能会出现一些冲突。再次强调,我不确定您所说的“我可以解析提交并返回正常状态”的意思,但如果您之前已经解决了冲突,那么做起来应该没问题。
git log --graph --oneline --all
的状态。你的远程仓库是正确的状态,而本地仓库是错误的状态吗?此外,根据你正在做的事情,这可能不是一个坏的状态;你在本地有尚未发布到任何地方的更改。 - Makotogit reset HEAD~
,然后按照我的答案中建议的命令操作。你同意吗? - scharette