繁体   English   中英

Git:推送到远程分支后又恢复到未进行的更改?

[英]Git: getting back to unstaged changes after pushing to remote branch?

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

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 ,我的更改全部消失了。 我的印象是,我仍然会将所有更改都列出,而不是分阶段进行。 (发生在我身上的所有更改都移到了“新分支”。)是否有任何方法可以回到主分支上进行所有未暂存的更改的状态?

谢谢。

将更改提交到新分支后,您将没有未暂存的更改。 提交后,无论您位于哪个分支上(或在进行更改之间切换),提交的所有阶段更改( git add )都将提交到当前分支。

但是,如果您需要将所有上次提交的更改都返回到master分支中,则可以执行回滚( git reset --soft )。 通过这样做,您将删除分支new-branch上的最后一次提交

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

这将回滚您在分支上的最后一次提交,并且您所做的更改将在暂存中可用。

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

运行以下命令:

  1. git checkout新分支
  2. git reset --soft HEAD ^
  3. git checkout主
  4. git状态

如果您在提交之前是在撒谎,请尝试执行此操作,而不要执行第2步:

git reset --soft HEAD~3

它将恢复HEAD中第四个最后一次提交所指定的更改。 (您需要根据不需要的提交的位置更改数字“ 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

我确实建议您了解以下三种状态:提交,修改和暂存。 在这里阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM