git pull之后保留重做的本地更改?

时间:2017-10-29 16:20:47

标签: git

我的错误是覆盖了我的本地存储库上已经存在于我的遥控器上的提交。我有3个提交尚未推送到远程。有没有办法可以保留这些更改,这样当我执行git pull时,我可以解析提交并恢复正常?

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

2 个答案:

答案 0 :(得分:1)

  

我有3个提交尚未推送到远程。有没有办法可以保留这些更改,这样当我执行git pull时,我可以解析提交并恢复正常?

这里有一些选择。

1)你不必做任何事情。

作为documentation says

  

descending order ascending order ascending order no order no order no order 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 快速复制历史记录,以防您重置太久或改变主意。)

2)您可以使用git log --oneline

您运行reflog您将获得当前分支的提交历史记录。有一个类似的命令可以查看您最近检查过的提交:get log --oneline

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

git reflog

(请注意,reflog通常会保留您的历史记录约90天)

3)你可以"备份"你的分支。

如果你是紧张的,你真的想确定你不会失去你的承诺,或者你会做一些复杂的事情,而你却不想拥有要搜索git checkout -b <branch-name> <commit-hash> 查找旧提交,您可以使用以下命令快速创建备份分支:

reflog

如果需要,您可以通过签出备份分支并查看其历史记录来验证其是否有效。然后,在检出原始分支的情况下,运行git branch <backup-branch-name> <HEAD-or-branch-to-backup>

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

git pull

答案 1 :(得分:0)

注意

如果您的本地更改尚未提交,则此方法有效。如果您已经提交了本地更改,我不清楚。在运行命令之前,请留下评论来回答我的问题。

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

git stash
git pull
git stash apply

现在,这将首先隐藏您当前的更改,并允许您从远程拉出。当您运行git stash apply时,可能会出现一些冲突。再一次,我不确定你是什么意思我可以解析提交并恢复正常,但如果你已经解决了冲突,那么你应该做得很好。