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 现在跟踪两个不同的本地分支(master
和 original-master
)
@zaratustra OP 正在寻求将他的更改保留在他的本地 master
分支上。如果没有这些提交“孤立”,我看不到任何解决办法。至于命名,OP可以随意更改分支的名称。
好主意,让我们看看哪种解决方案更适合:)以上是关于git stash `没有本地更改`,但 git status `提前 3 次提交`的主要内容,如果未能解决你的问题,请参考以下文章