保留本地更改以在git拉取后重做?

保留本地更改以在git拉取后重做?,git,Git,我的错误是覆盖本地存储库中已在远程存储库中的提交。我有3个提交尚未推送到远程。有没有一种方法可以保留这些更改,以便在执行git pull时,可以解析提交并返回正常状态 我需要一步一步的命令,因为我害怕做错事。注意 如果您的本地更改尚未提交,这将起作用。我不清楚您是否已经承诺了本地更改。在运行命令之前,请留下评论回答我的问题 如果我理解正确,您需要从远程提取数据,同时保留当前的本地更改。如果是这种情况,这里有一个简单的解决方案。运行以下命令: git stash git pull git stas

我的错误是覆盖本地存储库中已在远程存储库中的提交。我有3个提交尚未推送到远程。有没有一种方法可以保留这些更改,以便在执行git pull时,可以解析提交并返回正常状态

我需要一步一步的命令,因为我害怕做错事。

注意

如果您的本地更改尚未提交,这将起作用。我不清楚您是否已经承诺了本地更改。在运行命令之前,请留下评论回答我的问题

如果我理解正确,您需要从远程提取数据,同时保留当前的本地更改。如果是这种情况,这里有一个简单的解决方案。运行以下命令:

git stash
git pull
git stash apply
现在,这将首先隐藏您当前的更改,并允许您从远程提取。当您运行
git stash apply
时,可能会出现一些冲突。再一次,我不确定你说的我可以解析提交并返回正常状态是什么意思,但是如果你在之前解决了冲突,你应该可以这样做

我有3个提交尚未推送到远程。有没有一种方法可以保留这些更改,以便在执行git pull时,可以解析提交并返回正常状态

这里有几个选项

1) 你什么都不用做。 作为:

git pull
git fetch
的简写,后跟
git merge fetch\u HEAD

因此,如果您当前的历史记录如下所示:

12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
98aabbcc76 merge from server
12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
然后在
git pull
之后,您的历史将如下所示:

12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
98aabbcc76 merge from server
12bcdef345 my third commit
8765fedcba my second commit
abcdef1234 my first commit
因此,如果您想回到拉之前的位置,可以重置为原始提交之一,如下所示:

git reset --hard 12bcdef345
(您可能希望使用
git log--oneline
快速复制您的历史记录,以防您重置得太晚或改变主意。)

2) 您可以使用
reflog
运行
getlog--oneline
将获得当前分支的提交历史记录。有一个类似的命令用于查看您最近签出的提交:
git reflog--oneline

即使删除当前分支,也可以使用
git reflog
查找已签出的提交,然后通过运行以下命令从旧提交重新创建分支:

git checkout -b <branch-name> <commit-hash>
如果需要,可以通过签出备份分支并查看其历史记录来验证它是否工作。然后,签出原始分支后,运行您的
git pull

如果将来某个时候您决定将原始分支恢复到备份时的位置,只需将其重置为备份分支,如下所示:

git reset --hard <backup-branch-name>
git重置——硬

显示git log--graph--oneline--all的状态。您的远程设备是否处于正确状态,而本地设备是否处于错误状态?而且,根据你在做什么,这可能不是一个糟糕的状态;您在本地进行的更改尚未发布到任何地方。@Makoto是的,您是对的。如果他做出了本地的改变,想从远程撤军。我想他应该运行
git reset HEAD
,然后运行我在回答中建议的命令。你同意吗?@Makoto我已经做了很多git,但我必须承认这是一个非常好的问题,因为他可能已经投入了他的工作。我在Stackoverflow上看不到关于这个主题的其他问题。