2014-07-23 189 views
1

所以我做了一个改变了一堆文件,然后创建一个新的分支,并将其推到了一个新的远程分支如下:Git:推送到远程分支后回到未分离的更改?

git status 
    # lots of changes listed 
git checkout -b new-branch 
git add . 
git commit -m "pushing to new-branch" 
git push origin new-branch 

然而,当我回到我的主分支,运行git status结果为:

nothing to commit, working directory clean,我的更改全部没了。我的印象是,我仍然将所有的变化都列出来,没有上演。 (发生在我身上的所有变化都转移到了我的'新分支'上。)有什么办法可以恢复到在master分支上进行所有未分离更改的状态?

谢谢。

+3

更改不会在分支*上分阶段(或未分阶段)*,只是简单地分阶段进行。一旦承诺,他们不再上演,他们只是承诺。这是混乱的根源吗?如果不是,我根本不理解这个问题。 – torek

+2

看来你无法理解git的一些基础知识;我建议你阅读gitpro书的[“三国”](http://git-scm.com/book/en/Getting-Started-Git-Basics#The-Three-States)子章节。如果你想有效地使用git,理解这个概念是非常重要的。 –

回答

0

当您将更改提交到新分支时,您没有更多未分离的更改。无论您在哪个分支上(或者您在进行更改之间进行切换),所有分阶段更改(git add)都会提交给当前分支。

但是,在您的情况下,如果您需要在主分支中返回所有上次提交的更改,则可以执行回滚(git reset --soft)。通过使这个你要删除的最后一个提交在你的分支new-branch

git checkout new-branch 
git reset --soft HEAD^ 

做这将回滚在树枝上,你提出将在升级可用的变化上次提交。

现在您可以结帐主人并进行其他更改并再次提交。

0

运行以下命令:

  1. git的结帐新分支
  2. git的复位--soft HEAD^
  3. git的结帐主
  4. git的状态

如果是在某些提交之前说谎然后尝试这个而不是第2步:

git reset --soft HEAD~3 

它将恢复HEAD中最后第四次提交指定的更改。 (您需要根据您不需要的提交的位置更改数字'3'。)

并检查git状态。您应该能够看到您的本地更改,但尚未提交。

0

有没有什么办法可以回到这个状态,让我在master分支上进行所有未分离的更改?

我不确定你为什么要这样做。我不推荐它,但是这将这样的伎俩:

git checkout master # go back to the master branch 
git merge new-branch # merge in the changes you committed in new-branch 
git reset --soft HEAD~1 # make HEAD point to the commit before the merge 
         # this will leave the changes in the index, 
         # in other words, staged 

,你也可以用

git reset --mixed HEAD~1 # make HEAD point to the commit before the merge 
         # this will leave no changes in the index, 
         # in other words, no changes are staged 

替换最后一个命令我建议你了解三种状态:承诺,修改和上演。阅读here