git stash`没有本地更改`但是git status`在origin / master之前提交3次提交

时间:2015-09-08 15:04:38

标签: git

我做了一个git commit -am,紧接着git stash,得到了消息
    No local changes to save

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

这是对的吗?

我正在研究一些东西并做了一些提交,但没有推动变化。现在我想隐藏'他们并回到一个干净的版本(我最近的pushed更改 - 不知道如何参考这个)

如何将我尚未推送的工作藏匿到最新推出的主分支?

3 个答案:

答案 0 :(得分:11)

如果我理解是对的,你需要:

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)删除备份分支。如果您无法删除,则意味着您尚未完全合并备份分支和主分支。

git branch -d my_master_backup

6)从步骤1恢复本地更改:

git stash pop

PS:您可以避免创建备份分支并使用reflog。如果要恢复提交,则需要执行git merge HEAD@{X},其中X是reflog所需提交的编号。

答案 1 :(得分:5)

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

这解除了我的所有提交,但保留了所有已更改的文件。然后我就能够隐藏这些变化,因为它们还没有被提交。在我藏起来之后,它会自动将我的本地文件重置为origin / master。

答案 2 :(得分:1)

从您的问题和评论中,您想要做的就是返回到远程存储库的主分支提交,但保留您所做的更改因为你已经完成了这个

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

$ git checkout -b original-master origin/master

这将创建一个名为original-master的新分支(并检查此分支,将您的工作目录恢复到origin/master指向的位置),该分支将与远程​​{{ 1}}' s origin分支。

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