git stash:`没有本地更改`,但git status显示`比origin/master领先3个提交`

9
我进行了git commit -am,紧接着执行了git stash,得到了消息:
No local changes to save 当我运行git status时,我得到了以下信息:
Your branch is ahead of 'origin/master' by 3 commits. 这是正确的吗?
我正在处理一些工作并进行了一些提交,但还没有推送更改。现在我想要将它们暂存并返回到一个干净的版本(我的最新pushed更改 - 不知道怎样引用)。
我如何将未推送的工作暂存并恢复到最新推送的主分支?

1
没错,你比之前多提交了三个版本。你说的“我怎么把我的工作藏起来然后去到主分支”是什么意思?难道你不在“主分支”上吗?请展示一下“git branch”的输出结果。 - neshkeev
3
你在问什么?你想要做什么,确切地说? - jub0bs
1
我认为你混淆了分支和存储。你想把本地更改放在存储中。如果你想回到 origin/master 的位置并保存你的工作,可以使用 git checkout origin/master 命令。你也可以使用 git push origin master 命令将你的提交推送到主分支,或者将你的工作保存在一个新的分支中,然后检出 origin/master。 - Andy
关键问题是您真的想要“保存”当前工作吗?还是您愿意失去它并获得最新的推送更改? - codemonkey
1
请看这个答案https://dev59.com/vGIj5IYBdhLWcg3wzIJo,它解释了如何进行软重置,这正是您想要的。 - codemonkey
显示剩余3条评论
3个回答

16

如果我理解正确,你需要:

1)保存本地更改。


git add -A
git stash

2)备份您的提交记录

git branch my_master_backup

3) 将您的HEAD重置回origin/master

git reset --hard origin/master

4) 使用“干净版本”进行所需工作。

5) 恢复您的提交所做的更改。如有冲突,请解决。

git merge my_master_backup

6) 放弃备份分支。如果您无法删除它,则意味着您还没有完全合并备份分支和主分支。

git branch -d my_master_backup

6) 从第一步中恢复您的本地更改:

git stash pop

提示:您可以避免创建备份分支并使用Reflog。当您想要还原提交时,需要执行git merge HEAD@{X},其中X是从Reflog中选择的所需提交的编号。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Thomas Stringer
我建议OP在进行硬重置之前,将他们本地的(未提交的)更改存储并创建一个备份分支。这样,这些更改/提交对他们始终是可用的。 - neshkeev

6
感谢大家的帮助。我所做的是:
git reset --soft origin/master git stash save 'stashing my unfinished changes' 这个操作撤销了我的所有提交,但保留了我所有更改的文件。然后我可以将更改存储到暂存区,因为它们还没有提交。它会在我暂存后自动将我的本地文件重置为origin/master。

1
从您的问题和评论中,听起来您想要做的是回到远程存储库的主分支提交,但保留您自己所做的更改。您可以做的是创建一个新的本地分支,其中包含远程(假设它被称为 origin)分支(假设您正在使用 master)。
$ git checkout -b original-master origin/master

这将创建一个名为original-master的新分支(并检出此分支,将您的工作目录带回到origin/master指向的位置),该分支将与远程originmaster分支处于相同的提交状态。
此时,您从origin/master到(本地)master的3个提交将被保留,但是您可以使用origin/master的父级开始不同的开发分支(通过创建一个名为original-master的新分支)。

我觉得有点困惑,因为远程主分支现在跟踪两个不同的本地分支(“master”和“original-master”)。 - neshkeev
@zaratustra OP希望在本地保留他对master分支所做的更改。如果没有这些提交被“孤立”,我看不到任何解决方法。至于命名,如果OP愿意,可以更改分支名称。 - Thomas Stringer
好主意,让我们看看哪个解决方案更适合:) - neshkeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接