首页 > 解决方案 > Git 在分支切换失败后删除了我的文件

问题描述

通常我会在一个名为的本地分支上工作,然后在功能完成test后将该分支合并到。master但是,由于某种原因,我丢失了最新的更改。

这是我所做的:

T:\Test [test × +4 ~3 -5 !]> git status
On branch test
Your branch is based on 'origin/test', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   jest.config.js
        modified:   ormconfig.ts
        modified:   src/index.ts
        deleted:    src/it-portal/entity/Kiwi.ts
        deleted:    src/it-portal/entity/Movie.ts
        deleted:    src/it-portal/entity/User.ts
        deleted:    src/resolvers/HelloWorldResolver.ts
        deleted:    src/resolvers/MovieResolver.test.ts
        deleted:    src/resolvers/MovieResolver.ts
        deleted:    src/tests/Interfaces/global.d.ts
        deleted:    src/tests/config/globalSetup.ts
        deleted:    src/tests/config/globalTeardown.ts
        deleted:    src/tests/config/setupFiles.ts

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/it-portal/entity/Account.ts
        src/resolvers/AccountResolver.test.ts
        src/resolvers/AccountResolver.ts
        src/test-utils/

no changes added to commit (use "git add" and/or "git commit -a")

T:\Test [test × +4 ~3 -10 !]> git add .

T:\Test [test × +4 ~7 -6 ~]> git commit -am 'added Account entity and resolvers'
[test caaa67a] added Account entity and resolvers
 17 files changed, 164 insertions(+), 183 deletions(-)
 create mode 100644 src/it-portal/entity/Account.ts
 delete mode 100644 src/it-portal/entity/Kiwi.ts
 delete mode 100644 src/it-portal/entity/Movie.ts
 delete mode 100644 src/it-portal/entity/User.ts
 create mode 100644 src/resolvers/AccountResolver.test.ts
 create mode 100644 src/resolvers/AccountResolver.ts
 delete mode 100644 src/resolvers/HelloWorldResolver.ts
 delete mode 100644 src/resolvers/MovieResolver.test.ts
 delete mode 100644 src/resolvers/MovieResolver.ts
 rename src/{tests => test-utils}/Interfaces/global.d.ts (100%)
 rename src/{tests => test-utils}/config/globalSetup.ts (100%)
 rename src/{tests => test-utils}/config/globalTeardown.ts (100%)
 rename src/{tests => test-utils}/config/setupFiles.ts (100%)
 create mode 100644 src/test-utils/helpers/axios.ts

T:\Test [test ×]> git checkout master
fatal: cannot create directory at 'src/resolvers': Permission denied

T:\Test [test × +3 ~3 -8 !]> git merge test
Already up to date.

T:\Tes [test × +3 ~3 -8 !]> git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        jest.config.js
        ormconfig.ts
        src/index.ts
Please commit your changes or stash them before you switch branches.
error: The following untracked working tree files would be overwritten by checkout:
        src/it-portal/entity/Kiwi.ts
        src/it-portal/entity/Movie.ts
        src/it-portal/entity/User.ts
Please move or remove them before you switch branches.
Aborting

T:\Test [test × +3 ~3 -8 !]> git log
commit caaa67ae6643b5efa2c7f3bd65a3aa4317037367 (HEAD -> test)
Author: Me <bob@gmail.com>
Date:   Thu Jun 18 14:25:10 2020 +0200

    added Account entity and resolvers

commit 724bb33f38f3c380ac07666f0f6c3e5ca8648d8f (origin/master, master)
Author: Me <bob@gmail.com>
Date:   Wed Jun 17 15:27:14 2020 +0200

T:\Test [test × +3 ~3 -8 !]> git status
On branch test
Your branch is based on 'origin/test', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   jest.config.js
        modified:   ormconfig.ts
        modified:   src/index.ts
        deleted:    src/it-portal/entity/Account.ts
        deleted:    src/resolvers/AccountResolver.test.ts
        deleted:    src/resolvers/AccountResolver.ts
        deleted:    src/test-utils/Interfaces/global.d.ts
        deleted:    src/test-utils/config/globalSetup.ts
        deleted:    src/test-utils/config/globalTeardown.ts
        deleted:    src/test-utils/config/setupFiles.ts
        deleted:    src/test-utils/helpers/axios.ts

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/it-portal/entity/Kiwi.ts
        src/it-portal/entity/Movie.ts
        src/it-portal/entity/User.ts

no changes added to commit (use "git add" and/or "git commit -a")

T:\Test [test × +3 ~3 -8 !]> git branch
  master
* test

master我注意到切换到分支时出了点问题。但是现在,虽然我在测试中做了正确的提交,并且仍然在分支上,test但它并没有向我显示添加的文件,也没有向我Account.ts显示删除的文件,比如Kiwi.ts. 关于如何解决这个问题的任何想法?

还要检查以下内容,这显示了我不想发生的事情。

T:\Test [test × +3 ~3 -8 !]> git checkout test
Switched to branch 'test'
M       jest.config.js
M       ormconfig.ts
M       src/index.ts
D       src/it-portal/entity/Account.ts
D       src/resolvers/AccountResolver.test.ts
D       src/resolvers/AccountResolver.ts
D       src/test-utils/Interfaces/global.d.ts
D       src/test-utils/config/globalSetup.ts
D       src/test-utils/config/globalTeardown.ts
D       src/test-utils/config/setupFiles.ts
D       src/test-utils/helpers/axios.ts
Your branch is based on 'origin/test', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

标签: gitgithubversion-control

解决方案


怎么了:

  1. git checkout master失败的原因Permission denied。您创建的新文件可能比您拥有更多特权的用户,或者这些文件的权限由于某些原因已被更改/损坏。
    Git 无法执行所需的更改来切换分支并恢复分支的工作树master

  2. git merge test没有任何效果。您从未切换过分支,并且您已经在test分支上。

  3. 第二个git checkout master警告您未提交的更改并停止 switch 分支命令。

  4. git log向您展示了您所做的提交。这是保证您的工作不会丢失,并确认您在test分支机构。

  5. git status向您展示了一个混乱的工作树。
    该工作树是第一个git checkout master(在点 1)的结果。
    在通常情况下,当git checkout由于工作树脏而无法实现时,git 会停止操作,恢复工作树并向用户显示它无法更改分支的原因,就像在第 3 点(第二个git checkout)中发生的那样。

最有可能的是,第一个git checkout无法恢复工作树,因为它没有创建文件夹的正确权限,导致工作树混乱。

您有很多方法可以将工作树恢复到当前分支中的最后一次提交。
我建议您在尝试任何签出或合并命令之前git reset --hard HEAD完全恢复您的分支的工作树并检查文件的任何权限问题并解决它。test


推荐阅读