Git:在推送到远程分支后返回到未老化的更改?

Git:在推送到远程分支后返回到未老化的更改?,git,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会导致: 无需提交,工作目录已清理,我的更改也已全部消失。我当时的印象

因此,我对一组文件进行了更改,然后创建了一个新分支,并将它们推送到一个新的远程分支,如下所示:

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
会导致:

无需提交,工作目录已清理
,我的更改也已全部消失。我当时的印象是,我仍然会把我所有的改变都列出来,不放在舞台上。(我突然想到,我所有的更改都被移到了我的“新分支”中。)有没有办法回到主分支上所有未老化更改的状态


谢谢。

当您将更改提交到新分支时,您将不再有未过期的更改。无论您在哪个分支上(或在进行更改之间切换),一旦提交,所有阶段性更改(
git add
)都将提交到当前分支

然而,在您的情况下,如果您需要在主分支中返回所有最后提交的更改,您可以执行回滚(
git reset--soft
)。通过执行此操作,您将删除分支上的最后一次提交
新分支

git checkout new-branch
git reset --soft HEAD^
这将回滚您在分支上的最后一次提交,您所做的更改将在暂存中可用


现在,您可以签出master并进行其他更改,然后再次提交。

运行以下命令:

  • git签出新分支
  • git重置--软头^
  • git签出主机
  • git状态
  • 如果您在某些提交之前撒谎,请尝试以下操作,而不是步骤2:

    git reset --soft HEAD~3
    
    它还原头中最后第四次提交指定的更改。(您需要根据不需要的提交位置更改数字“3”。)

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

    有没有办法回到主分支上所有未老化更改的状态

    我不知道你为什么要这么做我不推荐它,但这会起作用:

    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
    

    我建议您了解这三种状态:提交、修改和暂存。读取。

    更改不会在分支上暂存(或未暂存),它们只是暂存。一旦承诺,他们就不再上演,他们只是承诺而已。这就是这种混乱的根源吗?如果不是的话,我一点也不理解这个问题。看起来你在理解git的一些基础知识方面有困难;我建议您阅读gitpro书的分章。如果您想有效地使用git,理解这个概念是非常重要的。