git stash `没有本地更改`,但 git status `提前 3 次提交`

Posted

技术标签:

【中文标题】git stash `没有本地更改`,但 git status `提前 3 次提交`【英文标题】:git stash `No local changes` but git status `ahead of origin/master by 3 commits` 【发布时间】:2015-12-04 08:09:59 【问题描述】:

我发送了git commit -am,然后立即发送了git stash 并收到了消息No local changes to save

当我运行git status 时,我得到Your branch is ahead of 'origin/master' by 3 commits.

这是对的吗?

我正在做一些事情并进行了一些提交,但没有推送更改。现在我想“隐藏”它们并返回一个干净的版本(我最新的pushed 更改 - 不知道如何引用这个)

如何存储我尚未推送的工作并恢复到最新推送的 master 分支?

【问题讨论】:

是的,你是前面的树提交,而不是后面。 How do I stash my work and go to the master 是什么意思?你不在master 分支吗?显示输出git branch 你在问什么?你到底想做什么? 我认为你所做的只是混淆了分支和存储。您想将本地更改放入存储中。如果您想在保存工作的同时回到 origin/master 所在的位置,您可以git checkout origin/master。您还可以使用git push origin master 将您的提交推送到 master,或者您可以将您的工作保存在新分支中,然后查看 origin/master。 @Andy,是的,你是对的,我认为git stash 会隐藏尚未推送的已提交更改。我需要删除提交然后存储? 看看这个答案***.com/questions/19859486/…,它解释了如何进行软重置,这就是你想要的。 【参考方案1】:

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

1) 保存您的本地更改。

git add -A
git stash

2) 备份您的提交

git branch my_master_backup

3) 将你的 HEAD 重置回原点/主控

git reset --hard origin/master

4) 用“干净的版本”做一些你想做的工作

5) 恢复您对提交所做的更改。如果有冲突,请修复。

git merge my_master_backup

6) 删除备份分支。如果不能删除,说明你的备份分支和master没有完全合并。

git branch -d my_master_backup

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

git stash pop

PS:您可以避免创建备份分支并使用reflog。当你想恢复你的提交时,你需要执行git merge HEAD@X,其中 X 是来自 reflog 的所需提交的编号。

【讨论】:

我不相信 OP 有任何实际藏匿的东西。而且他想保留他的工作,所以硬重置不会给他想要的东西。 我建议 OP 存储他们的本地(未提交)更改并在硬重置之前创建一个备份分支。因此,这些更改/提交将始终可供他们使用。【参考方案2】:

感谢大家的帮助。我所做的是git reset --soft origin/master git stash save 'stashing my unfinished changes'

这撤消了我所有的提交,但留下了我所有更改的文件。然后我能够隐藏更改,因为它们尚未提交。它会在我隐藏后自动将我的本地文件重置为原始/主文件。

【讨论】:

【参考方案3】:

从您的问题和 cmets 看来,您想要做的是 返回 到远程存储库的主分支提交,但保留您在完成后所做的更改这个

您可以做的只是在远程(假设它被称为origin)分支所在的位置(假设您正在使用master)创建一个新的本地分支。

$ git checkout -b original-master origin/master

这将创建一个名为original-master 的新分支(并检查此分支,将您的工作目录带回origin/master 指向的位置),它将与远程origin 的@ 提交相同的提交987654327@分行。

此时,您从 origin/master 到(本地)master 的 3 个提交将被保留,但您可以使用 origin/master 的父级启动不同的开发分支(通过创建一个名为original-master)。

【讨论】:

我觉得有点混乱,因为远程 master 现在跟踪两个不同的本地分支(masteroriginal-master @zaratustra OP 正在寻求将他的更改保留在他的本地 master 分支上。如果没有这些提交“孤立”,我看不到任何解决办法。至于命名,OP可以随意更改分支的名称。 好主意,让我们看看哪种解决方案更适合:)

以上是关于git stash `没有本地更改`,但 git status `提前 3 次提交`的主要内容,如果未能解决你的问题,请参考以下文章

git stash误使用drop删掉本地保存,恢复代码一次记录

git学习:git stash

git stash实现原理

Git stash 部分暂存文件

git放弃本地所有修改

git放弃本地所有修改